Rust 编程语言究竟是如何实现的?
How exactly is Rust programming language implemented?
如果你检查 github rust lang compiler repository 中的语言百分比,它表明 97.6% 的 rust lang 编译器是用 rust 编写的。那么这究竟是如何工作的呢?如何创建自己编写的编程语言(我认为这与编译器有关,因为它是阅读代码的人,不是吗?)。
这称为 self-hosting 或自举。基本思路是这样的:
- 使用您选择的其他编程语言为 Rust 的一小部分编写初始编译器。您现在拥有编译器 C0。
- 使用您拥有编译器的 Rust 子集,完全用 Rust 重写 C0 的源代码。使用编译器 C0 编译该程序以形成编译器 C1。
- 通过向您刚刚编写的编译器添加代码来正确解析和实现这些功能,从而为 Rust 添加功能。使用 C1 编译该 Rust 程序以形成编译器 C2。
通过重复步骤 (3) 任意多次,您可以逐渐向 Rust 语言添加越来越多的功能,而 Rust 编译器始终是用 Rust 本身编写的。
有一个名为 Reflections on Trusting Trust 的著名演讲谈到了这个过程的工作原理,以及如何使用这个过程来做邪恶的事情。
如果你检查 github rust lang compiler repository 中的语言百分比,它表明 97.6% 的 rust lang 编译器是用 rust 编写的。那么这究竟是如何工作的呢?如何创建自己编写的编程语言(我认为这与编译器有关,因为它是阅读代码的人,不是吗?)。
这称为 self-hosting 或自举。基本思路是这样的:
- 使用您选择的其他编程语言为 Rust 的一小部分编写初始编译器。您现在拥有编译器 C0。
- 使用您拥有编译器的 Rust 子集,完全用 Rust 重写 C0 的源代码。使用编译器 C0 编译该程序以形成编译器 C1。
- 通过向您刚刚编写的编译器添加代码来正确解析和实现这些功能,从而为 Rust 添加功能。使用 C1 编译该 Rust 程序以形成编译器 C2。
通过重复步骤 (3) 任意多次,您可以逐渐向 Rust 语言添加越来越多的功能,而 Rust 编译器始终是用 Rust 本身编写的。
有一个名为 Reflections on Trusting Trust 的著名演讲谈到了这个过程的工作原理,以及如何使用这个过程来做邪恶的事情。