[分享] 新手指南
應版友要求 來列個簡單的新手指南和書單好了
首先我個人非常不推 Dragon Book,原因在於他花太多時間在講 Lex/Parse 了
而且也非常多章節都過時了 用字遣詞方面也顯得過於學究不好懂
(Lex/Parse是必須學 但由於現代程式語言不像C/C++,基本上用top-down parser就可以
解決 而top-down parser老實講不需要什麼domain knowledge 所以在學習的過程
個人認為不要花太多時間在 Lex/Parse上)
Engineering a Compiler
個人認為這本書算是比較平衡 也能夠陪伴你比較久的新手教科書:
https://www.amazon.com/Engineering-Compiler-Keith-Cooper/dp/012088478X
Building an Optimizing Compiler
上面那本書的後半章節已經有涵蓋 IR 以及 backend,如果您想在 IR optimization
(通常我都會稱為"middle-end")方面有更深入了解的話 有一本不錯的入門書:
https://tinyurl.com/ybvs54mr
這本書還蠻薄的 程度的話大概只比 Engineering a Compiler 深一些些 算是一本
很不錯的銜接用書
閱讀原始碼
很可惜,就小弟所知 再接下去就沒有「普通」書可以讀了 我個人在這之後就是閱讀
大量的原始碼和paper。其中原始碼特別有幫助 不僅你可以知道怎麼實作 也可以深切
感受到學術與產業界在實務需求的差別 例如:在提到 pointer/alias analysis的時候
文獻一定會提到 Anderson/Steengaards 的演算法,但在LLVM裡面....兩者預設
都沒開啟XDD 最大的原因在於最普通、依靠一堆手寫規則/heuristic的 alias analysis
就已經「夠好了」,用前述的兩個演算法不僅花時間 成果也不見得比較好
至於要挑選GCC還是LLVM來閱讀,由於我還真的完全沒讀過GCC的原始碼(掩面
就不方便比較兩者的優缺點。如果就單講LLVM的話,因為他用的是 modern C++
(C++14)來開發,而且都有把最新的 feature 發揮得淋漓盡致,也將抽象的idea用物件
包裝起來,所以個人認為比較容易理解。除此之外 也是個學習良好C++ programming
習慣的優良範本。但您大概也知道 LLVM專案的規模以接近指數倍的速度增長
如果第一次看到大概感覺像是迷宮一樣,因此改天我會寫個簡單的原始碼研讀指南
系統架構相關書籍
即便 compiler 底下有分很多子領域,但最常見的依然是面向系統底層的需求,例如
針對某個特殊硬體功能做優化。因此熟悉處理器架構基本上也算必修課題之一
相信各位大學一定修過 Computer Architecture,用的不外乎也是暱稱「白算盤」
的 Computer Organization:
https://tinyurl.com/yawxuu8z
這本書已經算不錯了,建議也閱讀他的進階版本:
https://tinyurl.com/y86usjqb
再來如果是結合 compiler 與進階硬體架構的書,就不得不推 "The Blue Book":
https://tinyurl.com/y924fkmo
這本書我個人是視為聖經 因為雖然裡面只focus在各種層級的平行化問題
但第一,平行化就算過幾十年還是一個難解的問題XDD。第二,該書前三章提出的
dependency analysis 後來變成編譯器開發最重要的基石之一。可以用在非常廣泛的
問題上
除此之外雖然他是在本世紀初出版 但裡面非常多針對特定硬體功能的優化 現在
(意外地)依然可以用
目前就想到這些 如有其他建議歡迎來補充!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 169.234.228.195 (美國)
※ 文章網址: https://www.ptt.cc/bbs/CompilerDev/M.1592370461.A.B56.html
※ 編輯: mshockwave (169.234.228.195 美國), 06/17/2020 13:08:15
推
06/17 15:43,
5年前
, 1F
06/17 15:43, 1F
→
06/17 15:43,
5年前
, 2F
06/17 15:43, 2F
推
06/17 18:26,
5年前
, 3F
06/17 18:26, 3F
→
06/17 18:48,
5年前
, 4F
06/17 18:48, 4F
推
06/18 20:50,
5年前
, 5F
06/18 20:50, 5F
→
06/18 20:52,
5年前
, 6F
06/18 20:52, 6F
→
06/18 20:53,
5年前
, 7F
06/18 20:53, 7F
推
06/20 14:05,
5年前
, 8F
06/20 14:05, 8F
推
06/27 12:54,
5年前
, 9F
06/27 12:54, 9F
→
06/27 12:55,
5年前
, 10F
06/27 12:55, 10F
推
06/30 06:33,
5年前
, 11F
06/30 06:33, 11F
推
07/10 21:05,
5年前
, 12F
07/10 21:05, 12F