Golang 本身是用什么語言寫的?


-------------------------------

首先,問題的說法是有問題的。

golang本身是用什么語言寫的?

從問題描述和下面的回答來看,題主真正想問的是

Golang 的編譯器是用什么語言寫的?

 

看起來像是個“雞生蛋,蛋生雞”的問題,實際上不是的。

這個問題的關鍵在於理解,編譯器本身就是一個程序,它的功能就是把源代碼翻譯為計算機可執行的程序

對於 C/C++、Go、Rust 這樣的本地語言,它們編譯生成后的目標程序就是目標平台的本地可執行程序。比如你用這三種語言寫個 Hello World,在 Windows 平台下用編譯的結果一定是一個 .exe 文件,這些 .exe 文件里面沒有包含任何源語言的信息。Windows 運行它們的時候不知道,也不需要知道這些 .exe 文件編譯之前是用什么語言寫的,只需要把它們加載進內存,一句一句地執行指令就行了。

編譯器程序也是這個道理。假如你發明了一種新的語言 CNifeLang,首先需要用一種現有的語言寫一個 CNifeLang 的編譯器,比如說就用 Golang 吧;你用 Golang 寫了一個 CNifeLang 的編譯器,能成功地把任何合法的 CNifeLang 源代碼編譯為等價的目標程序。接着用 CNifeLang 寫一個程序,它與你用 Golang 寫的編譯器功能完全相同,用 Golang 實現的編譯器把這個程序編譯完成,你就得到了一個用 CNifeLang 實現的 CNifeLang 編譯器。因為這個程序的功能與用 Golang 寫的編譯器完全相同,所以你完全可以用這個編譯器去編譯 CNifeLang,於是 CNifeLang 實現了 自舉

如果題主學習了編譯原理這門課,就會發現編譯與編程語言是沒有關系的,它有一套完整而成熟的操作方法,你完全可以用任何一種圖靈完備的語言去寫任何一種形式語言的編譯器,而且有嚴格的數學方法證明你寫的編譯器是正確的。

我們常見的編程語言基本都實現了自舉,這是一種編程語言發展成熟的標志之一。因為編譯器既是一個復雜的工程,也有一套成熟的評價體系,能寫出成熟可用、效率有保證的本語言編譯器,就能說明這種語言已經能拿來用了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM