Rust是如何用Rust編寫的? - Reddit

banq發表於2022-04-25

我不是程式設計師,但是會看 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的版本... 最終你會得到一些人在一張物理紙上手動打孔,將編譯器編碼到一個古老的計算機中。

這就像創造一種新的口頭語言。你可以從定義一些詞開始,並將它們翻譯成其他語言。但遲早有一天,新的語言本身可以自我維持並定義自己的詞語。

相關文章