我最近一直在尋找Rust programming language。它是如何工作的? Rust代碼似乎被編譯成ELF或PE(等)二進制文件,但是我還沒有找到任何有關如何完成的信息?它是否被編譯爲中間格式,然後用gxx編譯其餘部分?任何幫助(或鏈接)將非常感激。Rust如何編譯爲機器碼?
5
A
回答
18
Rust編譯器的代碼生成階段主要是由LLVM完成的。 LLVM是一組用於構建編譯器的工具,其中最着名的是C [++]編譯器clang[++]
。首先,Rust編譯器(例如clang
)會執行所有Rust特定的工作,例如類型檢查和借用檢查;最終它會生成LLVM-IR。 IR代表中間表示它可以與組件相媲美,但稍微高一點,最重要的是:與平臺無關。然後Rust編譯器只是調用LLVM並且說:
嘿,哥們,你可以請這個IR併爲當前平臺生成機器代碼嗎?這將是非常美妙的◕◡◕
爲了這LLVM迴應:
當然,沒問題,新的朋友。這裏是您高度優化的機器碼[例如]
x86_64
! ♫♪♫
之後,他們邀請了幾個朋友把它包裝在一個很好的[例如] ELF包中,並將它放在用戶文件系統中。 (and the user is like...)
這樣的信息可以在the official FAQ裏面包含了很多有趣的信息反正被發現。
+4
編譯過程中的各個部分都很有禮貌。 –
相關問題
- 1. Python:編譯成BYTECODE編譯爲機器代碼的好處?
- 2. Rust編譯器支持中斷
- 3. 如何使用插口編譯器爲Android編譯代碼?
- 4. 如何讓Rust編譯器解析std導入?
- 5. 如何使用Rustup去除Rust編譯器工具鏈?
- 6. 編譯器如何編譯編譯器?
- 7. 是否有編譯爲機器代碼的C C++ C#編譯器
- 8. 如果英特爾編譯器是默認編譯器,如何爲VS 2003設置本機Microsoft編譯器?
- 9. 如何將VM特定的代碼編譯爲x86機器代碼?
- 10. 如何設置編譯器編碼?
- 11. 將C和彙編編譯爲純機器代碼?
- 12. 指定編譯器NVCC用於編譯主機代碼
- 13. Xamarin無法編譯爲本機代碼
- 14. Ionic將代碼編譯爲本機?
- 15. 如何從遠程機器編譯?
- 16. 如何爲Erlang虛擬機編譯
- 17. 如何在代碼編譯器應用程序中使用聯機代碼編譯器的輸出?
- 18. 什麼語言被用來編寫Rust編譯器?
- 19. 將java編譯爲本機代碼的性能如何?
- 20. 如何在64位機器上將.NET代碼編譯爲32位
- 21. Java編譯器爲Android手機
- 22. 代碼合同編譯器如何認爲這可能爲空?
- 23. 如何用ML編譯器編譯類別代碼?
- 24. 將Python編譯爲機器碼是否可行?
- 25. 翻譯MIPS彙編爲機器代碼:BNE
- 26. Android NDK歧義,編譯爲字節或機器代碼?
- 27. 如何在Rust中有條件地編譯目標字大小的代碼?
- 28. 如何爲另一臺機器編譯Linux可執行文件?
- 29. 用C++編譯器編譯c代碼
- 30. 如何編譯一個Rust庫來定位asm.js?
Rust編譯器使用LLVM作爲後端,像其他編譯器一樣(clang,Swift和其他)。這是否回答你的問題?目前還不清楚你在問什麼 – aochagavia