孟巖:編譯領域裡程碑之作 龍書《編譯原理》

hzbook2008發表於2009-01-16
編譯技術一向被認為是軟體開發這個以工程和實踐為主的學科當中真正的"火箭科技"。一個程式設計師,當他掌握了基本的程式設計技能,並且具備一些實踐經驗以後,如果要求在程式設計技術上進一步深造,則無非有三個方向:其一是鑽研高超的演算法,其二是深入計算機和網路體系結構,其三則是提升程式設計的抽象層次,三條路線彼此相關,觸類旁通,殊途同歸,無分優劣。不過從程式設計技術本身來說,提升程式的抽象層次具有化繁為簡、四兩撥千斤的妙趣,尤其引人入勝。六十年來計算機和軟體技術的一切發展,就是抽象層次不斷提升的過程。從最早的硬體開關、機器語言、順序加跳轉的指令流,到後來的高階語言、結構化程式設計,再到近二十年來相繼興起的物件導向、構件技術和麵向服務架構,無不遵循著這一邏輯。提升抽象層次有多種手段,函式庫、類庫、框架、構件、服務,不一而足。而在所有的手段當中,計算機語言是層次最高、能力最強、最富妙趣的一種,別的手段能夠達到的效果,語言都可以更輕鬆的實現,而語言所具備的某些效果,則沒有別的手段可以企及,語言是提升軟體抽象層次的終極手段。這並不奇怪,人類的抽象能力最終歸於語言,這是在哲學範疇內已經被深入討論過的命題。因此,計算機語言的理論及其處理,被很多一流學者認為是電腦科學中最成熟、最優雅、與實踐結合最完美的部分,其重要性不言而喻。

 在實踐中,如果一個程式設計師具備強悍的計算機語言處理能力,則他的程式編寫和設計能力將會比其他人有層次上的超越,往往能夠做出創新性的成果,給開發的效率和效果帶來本質性的提升。不但如此,在編譯技術中,有很多思想和具體的演算法,在很多其他場合能發揮意想不到的效果,可以說編譯技術是軟體開發的一個思想和工具的寶庫。然而在為數幾百萬的專業程式設計師隊伍當中,能夠主動利用這一寶庫,運用現有工具熟練處理語言者,已經是少數。而能夠主動根據需求設計優質的計算機語言,並且開發配套語言處理工具的人,更是鳳毛麟角。究其原因,一是因為語言設計本身對設計者的要求很高,非有深厚學養和實踐者難以有所作為,二是因為編譯技術本身頗有一定門檻,不但有一整套抽象的理論,而且涉及多個環節,大量細緻的演算法,需要集中精力系統學習,不容易掌握,更很難臻於上乘。

 放下計算機語言理論不提,若談及編譯技術,這本由幾位著名電腦科學家合著的"龍書"自出版以來就稱為本領域的經典著作,被世界眾多著名大學選作編譯技術本科和研究生課程的教材,可以說是編譯技術的"聖經"。也正是因為這本書的名氣最大,圍繞它的爭議也最多:讚譽它的人說它名門正派,體系完整清晰,技術點交代一絲不苟,語言嚴謹,思路縝密,義正詞嚴,絕無投機取巧之媚態,凡認真學習編譯技術者必讀之。而批評者則認為,面對編譯技術這樣一個枯燥艱深的課題,本書嚴謹有餘,活潑不足,顯得太刻板。知名的技術專家Allen Holub甚至因為不滿意這本書對於編譯技術的闡述方式,親自捉刀寫了一本書。然而更多的人還是認為,儘管這本書不可避免地有自己的缺點,但是全面衡量之下,這本書仍然不愧是編譯技術領域最全面最重要的著作,是編譯領域的"THE BOOK"。在我看來,龍書是一本嚴謹系統的學術性經典教材,對於有意系統瞭解編譯技術的讀者來說,確實不愧為必讀之書。

 

本書一版於1986年,橫行天下二十年,可以說已經是個奇蹟了。2006年,原書三位作者與一位新作者合作,根據二十年來編譯技術的發展,編寫了本書第二版。新版風格與特色與老版相似,但充分反映了該領域最新的重要成果,並且採用Java作為範例語言,體現出了作者開放進取的心態。更為重要的是,龍書作者認識到,大多數讀者不會親自去構造一個編譯器,而是希望從編譯這個思想技術寶庫中汲取營養,因此特別注意了概念思路的敘述和內容的啟發性。全書有兩大重點,前半部分側重於傳統的詞法和文法分析,後半部分則詳細介紹最佳化原理和技術。這兩個重點,可以說是編譯技術思想庫中最璀璨的寶貝,在很多領域都有著廣泛的應用和啟發性。可見作者絕不是就事論事,狹隘執著於編譯本身,而是希望儘可能給讀者提供更具實踐意義的工具和鍛鍊。這大概是這本新版最出色的地方。

 

由於出現了Lex/Yacc,特別是近年來流行的ANTLRLL(*)語言處理程式生成工具,如今編寫語言處理工具的難度已經大大降低了。然而若想達到較高的境界,系統的學習和實踐本書的內容仍然是必要的。相信新版中文版的出世能夠幫助更多年輕程式設計師真正理解編譯技術,並且為我所用,做出創新的成果。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16502878/viewspace-539875/,如需轉載,請註明出處,否則將追究法律責任。

相關文章