C語言編譯器為什麼能夠用C語言編寫?
01-14
既然C語言編譯器是將C源碼翻譯成機器能懂的位元組碼,那編譯器中的C語言有是由誰來翻譯的?這不是矛盾嗎?
相關問題:C編譯器用什麼語言寫的? - C(編程語言)
∵ C 語言編譯器可以將 C 語言代碼編譯為程序。
又 ∵ C 語言編譯器是一種程序。
∴ C 語言編譯器可以將 C 語言代碼編譯為 C 語言編譯器。有什麼矛盾的呢?- 人可以用自己造出一個新的人,這不矛盾呀。
可能你問的是「第一個 C 語言編譯器」是怎麼來的?答案是:用別的語言寫的……一旦第一個 C 語言編譯器被生成,它理論上就可以編譯出自己來。
- 第一個人是哪兒來的?其它物種演化來的。
第一個C 編譯器不是C 語言寫的。
在計算機中和現實世界幾乎相似,都有似是而非的「雞生蛋,蛋生雞」悖論!我一般調侃為「處女破處問題」,即第一次如何解決的問題,換用術語來講就是「自舉」問題!(不知道誰創造的這個詞,太有意味了)
言歸正傳,第一個編譯器是由彙編器編寫;第一個彙編器是由二進位編寫,聽起來是不是難以置信,吊爆了,用打卡紙帶寫程序!確實,難以想像,肯定很好玩!(沒實踐過,從書籍記載中可得知一二)
至於C語言編譯器,第一個編譯器也是彙編編寫的!其實不是唯一選擇,在大神里奇發明C語言的時候已經存在很多語言了,比如Fortran,Lisp,A,B等語言,都可以拿來寫C編譯器,但是好像他們沒有選擇它們來實現估計還是考慮的效率問題,也可能不會(純屬個人觀點(^_^))!
第一個C編譯器通過了,它就能編譯C語言源代碼了!那麼你就可以用C語言實現C編譯器了,然後用第一個編譯器編譯用C語言實現的C編譯器的C語言源代碼,通過後生成可執行程序,它就是用C語言實現的C語言編譯器了!簡直像繞口令了(^_^)!打個比喻:用漢字解釋漢字,那第一次漢字由誰解釋?肯定不是漢字,或許是圖形,肢體語言或聲音!字典可以認為用漢字編寫的解釋漢字的「編譯器」!就是這麼個道理!這個就是迭代的魅力。當初c語言就是為了寫unix,相互迭代的中,c語言越來越完善,unix也越來越好。就像c語言寫了c++,c++現在也可以用來寫c語言。c不是一天就完成的,從最初問世到正式發布,用了6年,到c語言標準發布,用了17年。
自舉編譯,先用彙編寫個簡單的,能滿足基本功能的編譯器,先不用考慮效率和編譯質量,只保證結婚是正確的,編譯出來一個版本之後,就可以自己編譯自己了。
多學幾門語言,你就知道了
推薦閱讀:
※為什麼總有人追求 one-pass compiler?
※c++為什麼需要虛函數表?
※現在編譯器處理那種「用換行代替分號」的語句邏輯是怎麼做的?
※程序如何根據變數名在內存中找到存放這個變數的地址?