Rust 编程语言究竟是如何实现的?

unh*_*guy 2 compiler-construction rust

如果您在github rust lang 编译器存储库中检查语言百分比,它会说rust lang 编译器的97.6% 是用 rust 编写的。那么这究竟是如何工作的呢?如何创建自己编写的编程语言(我认为这与编译器有关,因为它是阅读代码的人,不是吗?)。

tem*_*def 6

这称为自托管或引导。基本思路是这样的:

  1. 使用您选择的其他编程语言为一小部分 Rust 编写初始编译器。您现在拥有编译器 C0。
  2. 使用你有编译器的 Rust 子集,完全用 Rust 重写 C0 的源代码。使用编译器 C0 编译该程序以形成编译器 C1。
  3. 通过向您刚刚编写的编译器添加代码来正确解析和实现这些功能,从而向 Rust 添加功能。使用 C1 编译该 Rust 程序以形成编译器 C2。

通过根据需要多次重复步骤 (3),您可以逐渐向 Rust 语言添加越来越多的功能,而 Rust 编译器始终是用 Rust 本身编写的。

有一个名为Reflections on Trusting Trust的著名演讲,它讨论了这个过程是如何运作的,以及如何使用这个过程来做邪恶的事情。

  • 如果 OP 关心历史,步骤 #1 最初是在多年前在 OCAML 中完成的。从那时起,每个新的 Rust 编译器都只是使用以前的编译器进行编译。Rust 通过从现有架构交叉编译来移植到新架构。(这要求 LLVM 支持新架构,但目前这是 rustc 在那里工作的要求。) [此 reddit 线程](https://www.reddit.com/r/rust/comments/mjxbaz/mrustc_upgrade_rustc_1390 /gtddpw0/?utm_source=reddit&utm_medium=web2x&context=3) 提供额外的上下文。 (3认同)