程式語言和編譯器書單(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圈子比較流行?不懂不多說了。
先寫這麼多,語言類的以後有時間再填坑,特別是我不是這方面專家。
另外,編譯器涉及到的知識真是五花八門,比如沒有出現在照片和文字裡的還有彙編,數學,體系結構,甚至字串演算法,有機會再寫吧……
學海無涯……
相關文章
- python---之編譯型語言和解釋型語言的區別Python編譯
- 源語言、目標語言、翻譯器、編譯器、直譯器編譯
- 用Java寫編譯器(1)- 詞法和語法分析Java編譯語法分析
- Python程式設計基礎(一)程式語言是什麼?編譯型語言和解釋型語言的區別|Python是什麼?Python程式設計編譯
- eBookBinder for mac(電子書編譯器)Mac編譯
- [譯] 程式語言和平臺:對一條推特思路的評論
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- 『無為則無心』Python基礎 — 2、編譯型語言和解釋型語言的區別Python編譯
- 編譯程式(compiler)的簡單分析編譯Compile
- 編譯器有關的Makefile語法編譯
- C語言編譯器手機版C語言編譯
- 【編譯原理】手工打造語法分析器編譯原理語法分析
- 淺談彙編器、編譯器和直譯器編譯
- C語言編譯器開發之旅(二):解析器C語言編譯
- Windows和Linux上均可編譯的簡單HTTP伺服器程式碼WindowsLinux編譯HTTP伺服器
- 聊聊C語言和ABAPC語言
- 實驗1 C語言輸入輸出和簡單程式編寫C語言
- 精讀《手寫 SQL 編譯器 - 語法樹》SQL編譯
- 精讀《手寫 SQL 編譯器 - 語法分析》SQL編譯語法分析
- 幽默:Go語言的編譯器 - programmerjoke9Go編譯
- Java 10更新彙總,新的編譯器通吃主流程式語言Java編譯
- C語言和SH指令碼的雜交程式碼C語言指令碼
- 聊聊 C 語言和 ABAP 這兩門程式語言的關係
- 實現一個簡單的 JavaScript 編譯器JavaScript編譯
- 用 golang 寫一個語言(編譯器,虛擬機器)Golang編譯虛擬機
- vue編譯器Vue編譯
- CUDAFORTRAN編譯器編譯
- 實驗1_C語言輸入輸出和簡單程式編寫C語言
- 編譯原理讀書筆記編譯原理筆記
- Solidity語言學習筆記————2、使用編譯器Solid筆記編譯
- Babel:下一代Javascript語法編譯器BabelJavaScript編譯
- 程式設計師為什麼焦慮於程式語言和框架?程式設計師框架
- D語言編譯器被多個防毒軟體誤報是惡意程式編譯防毒
- x86彙編反編譯到c語言之——(1)表示式求值及賦值語句編譯C語言賦值
- 國產系統級程式語言與編譯器,輕鬆與 C 語言進行互動編譯
- Go編譯器簡介【譯】Go編譯
- ☕【Java技術指南】「編譯器專題」深入分析探究“靜態編譯器”(JAVA\IDEA\ECJ編譯器)是否可以實現程式碼優化?Java編譯Idea優化
- 什麼是靜態語言和動態語言。史上秒懂的大白話翻譯。