Rust是如何用Rust编写的? - Reddit


我不是程序员,但是会看 Rust 的 github 存储库,我注意到它在右下角是如何写“Rust 97.8%”的,我认为这意味着 97.8% 的脚本是 Rust。这怎么可能?

回答:
只需使用现有语言编写编译器,然后当新语言足够表达时,用新语言重写编译器。

在此基础上补充一点,这就是编译器的典型构建方式。
在过去的日子里,每个人都是用汇编编写的--有时甚至是用原始机器码编写的!
但是,现在的情况不同了。
为了构建一个编译器,我们必须首先用其他语言(那时是原始汇编)编写一个 "原始基本编译器"。
然后,我们使用该编译器来构建新的编译器。这真是太神奇了,真的! 如果你有兴趣,Brailsford教授在Computerphile的视频中谈到了这一点。

总之,在Rust的案例中,他们用来 "引导 "早期rustc的语言是OCaml。Rustc开发指南》广泛详细地谈到了这一点。

要理解的关键是:Rust 1.55不能编译Rust 1.55,因为很明显,那么原始的Rust 1.55是从哪里来的?它并不存在。
那么Rust 1.55是如何产生的呢?它是用Rust 1.54编译的。而那一个是由Rust 1.53编译的。以此类推。
最终,你会得到最初的Rust编译器,它是用Rust编写的,由之前的编译器编译,而编译器是用Ocaml编写的。
然后你可以以同样的方式跟踪Ocaml的版本... 最终你会得到一些人在一张物理纸上手动打孔,将编译器编码到一个古老的计算机中。

这就像创造一种新的口头语言。你可以从定义一些词开始,并将它们翻译成其他语言。但迟早有一天,新的语言本身可以自我维持并定义自己的词语。