在編譯型語言中,軟件是由編譯器編譯而來的,編譯器本身也是軟件,那編譯器又是怎么來的呢?咋一看這個(gè)問題,感覺又要掉入“雞生蛋,蛋生雞”這樣無止盡的循環(huán)中了。下面以C語言編譯器為例,介紹下C編譯器是什么來的。 C語言之父 C語言并不是第一門編程語言,在它之前,已經(jīng)有其他編程語言存在了,例如B語言、Fortran,匯編等。C語言的設(shè)計(jì)參考了B語言,歷史上第一個(gè)C編譯器是使用B語言編寫的,甚至有可能是由B+匯編混合編寫。在這里我們需要明確一點(diǎn),C語言的發(fā)展并不是一蹴而就的,而是經(jīng)歷了多年的完善和修改才被推出(C語言誕生于1969 - 1973年間,由貝爾實(shí)驗(yàn)室的湯普遜(Ken Thompson)和里奇(Dennis Ritchie)二人共同發(fā)明,正式成型是在1973年。)。同樣,C編譯器也是經(jīng)過逐次迭代更新才最終形成具備完整功能的C編譯器。 C語言具有自舉特性,自舉的意思是該語言的編譯器可以編譯出編譯該語言的編譯器。 是不是有點(diǎn)繞?話說我自己都差點(diǎn)沒讀懂自己寫的話。說簡(jiǎn)單一點(diǎn)就是該語言不需要借助其他語言就可以編譯出給自己用的編譯器。但是,第一個(gè)編譯器必須是通過其他語言編譯出來的(先有雞),有了第一版編譯器之后,才能實(shí)現(xiàn)編譯器的自我迭代。在用B語言編譯出第一個(gè)C編譯器后,利用C語言的自舉特性,就可以像滾雪球一樣,由最初的一個(gè)只具備基本功能的C編譯器不斷迭代,開發(fā)出支持更多特性的C編譯器,并最終形成我們現(xiàn)在使用的版本。如果你有興趣,可以在互聯(lián)網(wǎng)上下載到最新的gnu C工具鏈源碼并自行編譯出gcc編譯器。除了第一版C編譯器以外,C編譯器的源碼早已經(jīng)脫離了B語言,使用C語言本身編寫了。 gcc源碼下載地址 知道了C編譯是怎么來的,如果你還好奇B語言編譯器是怎么來的,那就是用匯編寫出來的。匯編器怎么來的,是用機(jī)器語言寫出來的。套用道家的說法:機(jī)器生匯編,匯編生B,B生C,C生萬物。 |
|