程式語言和編譯器書單(1)
這兩天微博上有人帖了一下十年前的程式語言和編譯器書單,說實話不是很完整,也沒有與時俱進。我今天把家裡的相關書籍整理了一下,列個清單。
首先宣告的是這麼幾點:
- 這些書基本只是個個人愛好收藏,我本專業不是學電腦科學與技術的,只是當碼農有點年頭而已。這些書我看了能有一半,就這麼多了。
- 這裡面有很多書已經絕版了,如果想看的話可以在圖書館或者二手市場裡面找。
- 以下的觀點只是個人看法,不代表已經是正確的,也不存在對出版社的偏袒。
ok,開始正題:
曾幾何時,不知道國內哪位高人或者出版社,談及了編譯原理就只有龍虎鯨三本,這三本書不能說不好,但是從如今的觀點來看,這三本書作為入門學習是不合時宜的。龍書成書較早,比較流行的說法是學習曲線陡峭以至於成了勸退良作。虎書寫作手法略感奇特,有時候看起來感覺很怪。鯨書大部分內容都是後端優化,加上早已絕版實在不能作為入門讀物。
作為絕對絕對的入門者自學(也就是自學完一門程式語言和資料結構以後),我建議看如下兩本:
《遊戲指令碼高階程式設計》,已經絕版,寫的很囉嗦,但是作為一本入門墊腳磚還行。 《Writing Compilers and Interpreters》,國內沒有引進,兩個版本區別是,第二版用C++描述,vm和 x86 16位彙編程式碼輸出,第三版是Java語言描述,帶一整套教學實驗環境。 這兩本書都是遞迴下降的Parser,沒什麼需要更多解釋了。
入門後正經學編譯原理,個人的看法(包括國外一些讀者的看法)是,看圖靈引進的《編譯器設計》第二版或《Modern Compiler Design》,不過MCD國內沒有引進,作者的另一本書稍後會介紹。
為什麼推薦《編譯器設計》,因為這本書整體組織上更適合現在的編譯器教學,前端內容略輕後端內容豐富,中間表示也很詳細。
讀完上面的書,其實自己寫一個簡單的編譯器就不是問題了。下面就可以進階開始分叉:
編譯器前端:
《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圈子比較流行?不懂不多說了。
先寫這麼多,語言類的以後有時間再填坑,特別是我不是這方面專家。
另外,編譯器涉及到的知識真是五花八門,比如沒有出現在照片和文字裡的還有彙編,數學,體系結構,甚至字串演算法,有機會再寫吧……
學海無涯……
相關文章
- 編譯型語言和解釋型語言的區別編譯
- 關於Basic程式直譯器及編譯原理的簡單化(1)---Basic器的語法分析及主要程式碼 (轉)C程式編譯原理語法分析
- 關於解釋型語言和編譯型語言的疑惑,請教編譯
- python---之編譯型語言和解釋型語言的區別Python編譯
- 源語言、目標語言、翻譯器、編譯器、直譯器編譯
- 小白說編譯原理-9-最簡單minus-c語言編譯器編譯原理C語言
- eBookBinder for mac(電子書編譯器)Mac編譯
- 用Java寫編譯器(1)- 詞法和語法分析Java編譯語法分析
- [譯] 程式語言和平臺:對一條推特思路的評論
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- javascript編寫一個簡單的編譯器(理解抽象語法樹AST)JavaScript編譯抽象語法樹AST
- Python程式設計基礎(一)程式語言是什麼?編譯型語言和解釋型語言的區別|Python是什麼?Python程式設計編譯
- 好書妙評之《編譯器設計》編譯
- javascript編寫一個簡單的編譯器JavaScript編譯
- C語言編譯器手機版C語言編譯
- 編譯器有關的Makefile語法編譯
- 57段讓編譯器崩潰的C語言程式碼編譯C語言
- gcc 編譯器與 clang 編譯器GC編譯
- 在Progress編輯器中批次編譯程式編譯
- 『無為則無心』Python基礎 — 2、編譯型語言和解釋型語言的區別Python編譯
- 關於Basic程式直譯器及編譯原理的簡單化(1)--詞法分析和代數式求值 (轉)C程式編譯原理詞法分析
- 【編譯原理】手工打造語法分析器編譯原理語法分析
- 可程式設計的編譯器程式設計編譯
- 【譯】說服Kotlin編譯器程式碼安全Kotlin編譯
- 淺談彙編器、編譯器和直譯器編譯
- [譯]iOS編譯器iOS編譯
- 編譯程式(compiler)的簡單分析編譯Compile
- linux(ubuntu)下的64位編譯器編譯32位程式LinuxUbuntu編譯
- Stack Overflow 最流行的程式語言和標籤
- C語言編譯器開發之旅(二):解析器C語言編譯
- Web程式語言和指令碼語言的就業趨勢Web指令碼就業
- 聊聊C語言和ABAPC語言
- 精讀《手寫 SQL 編譯器 - 語法樹》SQL編譯
- 精讀《手寫 SQL 編譯器 - 語法分析》SQL編譯語法分析
- Go語言內幕(2):深入 Go 編譯器Go編譯
- 中文程式語言中文程式語言實現:翻譯器
- 編譯器的編譯基本過程編譯
- 一張圖解析 編譯器編譯流程圖解編譯