聊聊為啥打死我也不學編譯這件事
在上古時代,程序員都用匯編編程,效率低下,非常痛苦。
只有那些大神才能使用匯編搞大事情。
軟件業的繁榮不能只靠幾個大神,還需要千千萬萬的碼農。
IBM公司29歲的巴科斯決心改變這種情況。
這個編程語言就是Fortran,但是當時人們對編譯理論了解不多,開發工作既復雜又艱苦。
這時候,語言學家喬姆斯基對自然語言結構的研究給編譯器帶來了意外之喜。
1957年,經過三年的努力,Fortran編譯器終于完成。
突破第一個編譯器以后,高級語言便如雨后春筍般發展起來
最為知名,影響力最大的還是C和C++
編譯器的理論和實踐也逐漸成熟
隨后甚至出現了生成編譯器的生成器
Lex 和 Yacc生成的程序只是編譯器的一部分,編譯器的基本結構通常是分為三段。
對一個公司來說,當它開發一個編譯器的時候,很少投入資金研發多種前端和后端,這就導致無法通用,無法共享。
后來,開源的GCC編譯器最早打破了這種模式。
GCC開源,跨平臺,支持多種前端和后端,很快成為Unix和Linux的標準編譯器。
圍繞著GCC,一個編譯王國隱然成形。
蘋果公司也決定采用GCC編譯自家的Objective-C
但是Objective-C畢竟是個小眾的語言,隨著時間的推移,蘋果公司提出的需求,GCC逐漸滿足不了了。
GCC還是個“單體應用”,很難嵌入到其他應用程序當中。
就在此時,一個大神橫空出世。
2005年,Chris Lattner加入蘋果,負責蘋果的編譯器,XCode等工具的開發,以及LLVM社區的發展。
他不負眾望,把Objective-C搞得風生水起,還開發了一個叫做Clang的LLVM編譯器前端,支持C、C++和Objective-C。
模塊化的LLVM吸引了很多語言的加盟
不僅如此,現在有很多領域都需要編譯技術,但是不需要完整的編譯器,模塊化的LLVM正好可以大放異彩。
60年間,編譯器從最早的把高級語言轉化成機器碼,到專注后端優化,終于走到了模塊化這一步,LLVM成了新的王者。
后記:編譯原理一門比較難的課程,我和很多同學聊的時候,有人說:編譯太抽象了,太枯燥了,還有人說:打死我也不學編譯了(這句話讓我印象極為深刻,直接當了標題)。其實不學編譯對日常工作影響也不大,大家主要把編譯器當做一個工具直接使用,不會去了解內部的實現。真正從事編譯器開發人也非常少。
不過學習編譯原理能讓程序員加深對編程語言和計算機系統的理解,有余力的話還是建議大家去看一下。