rust - Rust 是如何编译成机器码的?

标签 rust

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

最佳答案

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

首先,Rust 编译器(例如 clang)执行所有 Rust 特定的事情,如类型和借用检查;最后,它生成 LLVM-IR。 IR 代表 intermediate representation 并且它...与汇编相当,但更高级一点,最重要的是:平台无关。然后 Rust 编译器调用 ☏ LLVM 并说:

Hey buddy, could you please take this IR and generate machine code for the current platform? That would be fantastic ◕ ◡ ◕

LLVM 响应:

🌈 Sure, no problem, new friend. Here is your highly optimized machine code for [e.g.] x86_64! ♫♪♫

之后,他们邀请了更多的 friend 将其全部封装在一个漂亮的小[例如] ELF 包中,并将其精美地放置在用户文件系统中。 (and the user is like...)


可以在 the official FAQ 中找到此类信息无论如何,其中包含很多有趣的信息。有关 Rust 编译器的更多详细信息,您可以阅读 the "Rustc Guide" .对于这个问题,章节"High Level Overview"很有趣。

关于rust - Rust 是如何编译成机器码的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43385142/

相关文章:

rust - 如何在不分别分配堆上的每个项目的情况下创建拥有的特征对象列表?

android - 为移动应用程序集成 Rust + Flutter + Kotlin

generics - 生命周期结束时,通用类型参数不受限制

rust - 调用返回引用的函数时了解非词法生命周期

join - 可以在单次传递中为内存结构构建 FULL JOIN(不使用 sql!)

rust - 有没有办法部分解构结构?

rust - "let x = ~10;"在 Rust 中已经过时了吗?

rust - 不能借用 `...` 作为可变的,因为它也被借用为不可变的

rust - 如何指定特征的所有实现者也必须实现序列化?

rust - 自动使用 from_error 的 map_err 等价物