編譯器是怎麼編譯出來的?
01-01
編譯器是否也能算作一種程序?那它是不是也應該是編譯出來的?如果這麼說那麼第一個編譯器是怎麼出現的呢?
圖靈生機器,機器生彙編,彙編生 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 · GitHubMSVC不清楚,沒用過。再說說歷史。
第一個C語言的編譯器是用彙編寫的。發展的過程的話,
網上有很多文章講這個。比如:History of compiler construction先用彙編語言寫出編譯器核心部分,然後用核心部分寫編譯器
然後自編譯。
我大概記得編譯原理老師說第一個編譯器是18位工程師用一年時間寫出來的
編譯要能實現bootstrap,先用其他語言實現一個自己的編譯器,然後再逐步編譯自身,最後自己編譯自己就實現了
推薦閱讀:
※為什麼筆記本電腦電源要那麼大,台式機電源只要個插頭就行了,筆記本電源適配器能不能只要個插頭就可以充電?
※怎麼讓 Win10 任務欄全透明?
※桌面上的ie瀏覽器圖標刪不掉怎麼辦?
※筆記本電腦用的某某模具能代表什麼?
※計算機科學與技術專業學生怎樣向網路方向發展?