程式語言和編譯器書單(1)

skogkatt發表於2018-06-30

這兩天微博上有人帖了一下十年前的程式語言和編譯器書單,說實話不是很完整,也沒有與時俱進。我今天把家裡的相關書籍整理了一下,列個清單。

enter image description here enter image description here enter image description here

首先宣告的是這麼幾點:

  • 這些書基本只是個個人愛好收藏,我本專業不是學電腦科學與技術的,只是當碼農有點年頭而已。這些書我看了能有一半,就這麼多了。
  • 這裡面有很多書已經絕版了,如果想看的話可以在圖書館或者二手市場裡面找。
  • 以下的觀點只是個人看法,不代表已經是正確的,也不存在對出版社的偏袒。

ok,開始正題:

曾幾何時,不知道國內哪位高人或者出版社,談及了編譯原理就只有龍虎鯨三本,這三本書不能說不好,但是從如今的觀點來看,這三本書作為入門學習是不合時宜的。龍書成書較早,比較流行的說法是學習曲線陡峭以至於成了勸退良作。虎書寫作手法略感奇特,有時候看起來感覺很怪。鯨書大部分內容都是後端優化,加上早已絕版實在不能作為入門讀物。

作為絕對絕對的入門者自學(也就是自學完一門程式語言和資料結構以後),我建議看如下兩本:

enter image description here

《遊戲指令碼高階程式設計》,已經絕版,寫的很囉嗦,但是作為一本入門墊腳磚還行。 《Writing Compilers and Interpreters》,國內沒有引進,兩個版本區別是,第二版用C++描述,vm和 x86 16位彙編程式碼輸出,第三版是Java語言描述,帶一整套教學實驗環境。 這兩本書都是遞迴下降的Parser,沒什麼需要更多解釋了。

入門後正經學編譯原理,個人的看法(包括國外一些讀者的看法)是,看圖靈引進的《編譯器設計》第二版或《Modern Compiler Design》,不過MCD國內沒有引進,作者的另一本書稍後會介紹。

為什麼推薦《編譯器設計》,因為這本書整體組織上更適合現在的編譯器教學,前端內容略輕後端內容豐富,中間表示也很詳細。

enter image description here

讀完上面的書,其實自己寫一個簡單的編譯器就不是問題了。下面就可以進階開始分叉:

編譯器前端:

《Modern Compiler Design》的作者有一本書《Parsing Techniques》,vczh曾強烈推薦,這本書國內沒有引進。簡單地說,這是一本Parsing的百科全書,不僅內容上五花八門一網打盡,僅參考引用的索引就值一回票價。更進階的就是喬姆斯基的著作了,這已經到了語言學的範疇,別問我,我不懂。

編譯器後端:

後端可以看得書其實還是挺豐富的,不過我看的不多,班門弄斧一下:

《高階編譯器設計與實現》,鯨書,已經絕版。

《現代體系結構的優化編譯器》,這本似乎也絕版了,有一些比較有意思的內容,比如超標量什麼的。

《Data Flow Analysis: Theory and Practice》,程式碼優化必看讀物……就是有點晦澀。

還有幾本我也沒有買,暫時不列在這裡了。

虛擬機器環境:

《虛擬機器,系統與程式的通用平臺》,似乎也絕版?這是一本百科類的書,介紹了形形色色的虛擬機器,但是你想看到真正的技術內容可能就會失望,買來當索引不錯。

《虛擬機器的設計與實現》,一本垃圾,不要浪費一分錢在上面。

《深入理解Java虛擬機器》,買來沒看過,不評價。

《Advanced Design and Implementation of Virtual Machines》,圖靈已經引進正在招譯者,這本我前段時間看完了,適合深入理解JVM,其中GC演算法個人建議參考下面的書一起看。

工具類:

《垃圾回收演算法手冊》《垃圾回收的演算法與實現》,這兩本介紹了各種GC演算法,無論做VM還是Rumtime都強烈推薦一讀,這也是R巨巨推薦的。

《Lex and Yacc》《Flex and Bison》,懶得自己擼前端?那就看看用這個吧。

擴充套件知識:

《精通正規表示式》,這就不說了,個人推薦。

《領域特定語言》,似乎Java圈子比較流行?不懂不多說了。

先寫這麼多,語言類的以後有時間再填坑,特別是我不是這方面專家。

另外,編譯器涉及到的知識真是五花八門,比如沒有出現在照片和文字裡的還有彙編,數學,體系結構,甚至字串演算法,有機會再寫吧……

學海無涯……

相關文章