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

2022-01-11 08:03:17 字數 1088 閱讀 2964

原文:

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

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

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 實現了自舉

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

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

C語言是用什麼語言寫的?雞與蛋的關係

來自乙個小白的提問 c語言本身用什麼語言寫的?換個角度來問,其實是 c語言在執行之前,得編譯才行,那c語言的編譯器從 來?用什麼語言來寫的?如果是用c語言本身來寫的,到底是先有蛋還是先有雞?我們假設世界上不存在任何編譯器,先從機器語言說起,看看怎麼辦。機器語言可以直接被cpu執行,不需要編譯器。然後...

C語言它自身又是用什麼語言寫的?

這是來自我的星球的乙個提問 c語言本身用什麼語言寫的?換個角度來問,其實是 c語言在執行之前,得編譯才行,那c語言的編譯器從 來?用什麼語言來寫的?如果是用c語言本身來寫的,到底是先有蛋還是先有雞?我們假設世界上不存在任何編譯器,先從機器語言說起,看看怎麼辦。機器語言可以直接被cpu執行,不需要編譯...

用golang寫乙個proxy

我複雜的網路環境中,proxy是個很有用的工具,我們可以通過proxy 幫我們完成網路流量的 這個proxy得先能接收請求,所以這裡先啟動乙個tcp的監聽,獲取請求 func s server start glog.infof proxy listen in s,waiting for connec...