孟巖:編譯領域裡程碑之作 龍書《編譯原理》
在實踐中,如果一個程式設計師具備強悍的計算機語言處理能力,則他的程式編寫和設計能力將會比其他人有層次上的超越,往往能夠做出創新性的成果,給開發的效率和效果帶來本質性的提升。不但如此,在編譯技術中,有很多思想和具體的演算法,在很多其他場合能發揮意想不到的效果,可以說編譯技術是軟體開發的一個思想和工具的寶庫。然而在為數幾百萬的專業程式設計師隊伍當中,能夠主動利用這一寶庫,運用現有工具熟練處理語言者,已經是少數。而能夠主動根據需求設計優質的計算機語言,並且開發配套語言處理工具的人,更是鳳毛麟角。究其原因,一是因為語言設計本身對設計者的要求很高,非有深厚學養和實踐者難以有所作為,二是因為編譯技術本身頗有一定門檻,不但有一整套抽象的理論,而且涉及多個環節,大量細緻的演算法,需要集中精力系統學習,不容易掌握,更很難臻於上乘。
放下計算機語言理論不提,若談及編譯技術,這本由幾位著名電腦科學家合著的"龍書"自出版以來就稱為本領域的經典著作,被世界眾多著名大學選作編譯技術本科和研究生課程的教材,可以說是編譯技術的"聖經"。也正是因為這本書的名氣最大,圍繞它的爭議也最多:讚譽它的人說它名門正派,體系完整清晰,技術點交代一絲不苟,語言嚴謹,思路縝密,義正詞嚴,絕無投機取巧之媚態,凡認真學習編譯技術者必讀之。而批評者則認為,面對編譯技術這樣一個枯燥艱深的課題,本書嚴謹有餘,活潑不足,顯得太刻板。知名的技術專家Allen Holub甚至因為不滿意這本書對於編譯技術的闡述方式,親自捉刀寫了一本書。然而更多的人還是認為,儘管這本書不可避免地有自己的缺點,但是全面衡量之下,這本書仍然不愧是編譯技術領域最全面最重要的著作,是編譯領域的"THE BOOK"。在我看來,龍書是一本嚴謹系統的學術性經典教材,對於有意系統瞭解編譯技術的讀者來說,確實不愧為必讀之書。
本書一版於1986年,橫行天下二十年,可以說已經是個奇蹟了。2006年,原書三位作者與一位新作者合作,根據二十年來編譯技術的發展,編寫了本書第二版。新版風格與特色與老版相似,但充分反映了該領域最新的重要成果,並且採用Java作為範例語言,體現出了作者開放進取的心態。更為重要的是,龍書作者認識到,大多數讀者不會親自去構造一個編譯器,而是希望從編譯這個思想技術寶庫中汲取營養,因此特別注意了概念思路的敘述和內容的啟發性。全書有兩大重點,前半部分側重於傳統的詞法和文法分析,後半部分則詳細介紹最佳化原理和技術。這兩個重點,可以說是編譯技術思想庫中最璀璨的寶貝,在很多領域都有著廣泛的應用和啟發性。可見作者絕不是就事論事,狹隘執著於編譯本身,而是希望儘可能給讀者提供更具實踐意義的工具和鍛鍊。這大概是這本新版最出色的地方。
由於出現了Lex/Yacc,特別是近年來流行的ANTLR等LL(*)語言處理程式生成工具,如今編寫語言處理工具的難度已經大大降低了。然而若想達到較高的境界,系統的學習和實踐本書的內容仍然是必要的。相信新版中文版的出世能夠幫助更多年輕程式設計師真正理解編譯技術,並且為我所用,做出創新的成果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16502878/viewspace-539875/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 編譯領域裡程碑之作:龍書《編譯原理》編譯原理
- 為什麼編譯原理被稱為龍書?編譯原理
- 編譯原理讀書筆記編譯原理筆記
- JavaScript預編譯原理, 引擎,作用域JavaScript編譯原理
- 編譯原理編譯原理
- 編譯器的編譯基本過程編譯
- Flutter 編譯原理Flutter編譯原理
- 編譯原理概述編譯原理
- 編譯原理 START 龍虎鯨書簡介編譯原理
- 編譯過程編譯
- 編譯器的工作過程和原理編譯
- 【國外精選課程】編譯原理入門之編譯階段概述編譯原理
- 編譯原理入門篇|一篇文章理解編譯全過程編譯原理
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- Typescript編譯原理(一)TypeScript編譯原理
- 編譯原理概覽編譯原理
- Vue 模板編譯原理Vue編譯原理
- 白話編譯原理編譯原理
- vue原理:diff、模板編譯、渲染過程等Vue編譯
- iOS編譯過程的原理和應用iOS編譯
- Javac編譯過程Java編譯
- 編譯核心過程編譯
- 龍芯原始碼編譯MySQL原始碼編譯MySql
- Linux 程式編譯過程的來龍去脈Linux編譯
- JS學習系列 01 - 編譯原理和作用域JS編譯原理
- 模板函式編譯原理函式編譯原理
- 編譯原理與javacc初探編譯原理Java
- 《編譯原理》學習心得編譯原理
- 編譯連結過程編譯
- 編譯過程簡介編譯
- C++ 編譯過程C++編譯
- 從 JS 編譯原理到作用域(鏈)及閉包JS編譯原理
- Java編譯與反編譯Java編譯
- gcc 從語言編譯全過程 預處理---->編譯---->彙編----->連結GC編譯
- vue模板編譯(原理篇)Vue編譯
- 深入分析 Javac 編譯原理Java編譯原理
- 【編譯原理】語法分析(三)編譯原理語法分析
- 0909 編譯原理1編譯原理