如何将Rust编译为机器代码?

Dll*_*lyn 24 rust llvm-codegen

我最近一直在研究Rust编程语言.它是如何工作的?Rust代码似乎被编译成ELF或PE(等)二进制文件,但我无法找到有关如何完成的任何信息?它被编译成中间格式,然后用gxx编译其余部分吗?任何帮助(或链接)将非常感激.

Luk*_*odt 63

Rust编译器的代码生成阶段主要由LLVM完成.LLVM是一组用于构建编译器的工具,最常用于C [++]编译器clang[++].

首先,Rust编译器(例如clang,就像)执行所有Rust特定的东西,如类型和借用检查; 最后,它生成LLVM-IR.IR代表中间表示,它可以与汇编相媲美,但更高级别,更重要的是:独立于平台.然后Rust编译器只调用☏LLVM并说:

嘿哥们,请问这个IR并为当前平台生成机器代码?那太棒了◕◡◕

LLVM响应的是:

当然,没问题,新朋友.这是[例如]高度优化的机器代码x86_64!♫♪♫

之后,他们邀请了更多的朋友将它们包装在一个漂亮的小[例如] ELF包中,并将其精美地放在用户文件系统中.(而且用户就像...)


像这样的信息可以在官方常见问题解答中找到,其中包含许多有趣的信息.有关Rust编译器的更多详细信息,请阅读"Rustc指南".对于这个问题,"高级概述"这一章非常有趣.

  • 编译过程的各个部分彼此如此礼貌. (29认同)
  • 这是一个非常简洁但有趣的类比。 (2认同)