編譯器是怎麼編譯出來的?

編譯器是否也能算作一種程序?那它是不是也應該是編譯出來的?如果這麼說那麼第一個編譯器是怎麼出現的呢?


圖靈生機器,機器生彙編,彙編生 C,C 生萬物。


其實turbo pascal早就告訴我們真相了吧——那是anders用彙編寫的。


第一個C編譯器是用B語言寫的,後來的C編譯器就用上一個編譯器來編譯這一個新的編譯器。

現在Go也準備在Go1.3用Go來寫Go的編譯器(這句話……),它就是使用Go1.2來編譯出Go1.3的編譯器的,而之前的Go編譯器和庫都是用C寫的。

最最最最早一個所謂編譯器是用什麼寫的?那必然是用彙編語言寫的。

參考:

  • 第一個 C 語言編譯器是用什麼語言編寫的?

  • 編譯器

至於編譯器如何把編程語言變成目標機器碼,這個問題就很大了,大到成為了一門課,叫《編譯原理》


我只說C語言的,其它語言不了解。

先說現在的情況。

gcc是用C++寫的。源代碼的github鏡像:mirrors/gcc · GitHub

llvm/clang是用C++寫的。源代碼的github鏡像:llvm-mirror/clang · GitHub

MSVC不清楚,沒用過。

再說說歷史。

第一個C語言的編譯器是用彙編寫的。

發展的過程的話,

網上有很多文章講這個。

比如:History of compiler construction


先用彙編語言寫出編譯器核心部分,然後用核心部分寫編譯器

然後自編譯。

我大概記得編譯原理老師說第一個編譯器是18位工程師用一年時間寫出來的


編譯要能實現bootstrap,先用其他語言實現一個自己的編譯器,然後再逐步編譯自身,最後自己編譯自己就實現了


推薦閱讀:

為什麼筆記本電腦電源要那麼大,台式機電源只要個插頭就行了,筆記本電源適配器能不能只要個插頭就可以充電?
怎麼讓 Win10 任務欄全透明?
桌面上的ie瀏覽器圖標刪不掉怎麼辦?
筆記本電腦用的某某模具能代表什麼?
計算機科學與技術專業學生怎樣向網路方向發展?

TAG:編程 | 計算機 | 編譯器 |