[分享] 新手指南

看板CompilerDev作者 (夏克維夫)時間5年前 (2020/06/17 13:07), 5年前編輯推噓7(705)
留言12則, 8人參與, 5年前最新討論串1/1
應版友要求 來列個簡單的新手指南和書單好了 首先我個人非常不推 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
如果想看實作玩具級編譯器的書或 project 請問有沒有推
06/17 15:43, 1F

06/17 15:43, 5年前 , 2F
薦哪些是比較友好的?
06/17 15:43, 2F

06/17 18:26, 5年前 , 3F
MLIR簡單好用
06/17 18:26, 3F

06/17 18:48, 5年前 , 4F
llvm kaleidoscope
06/17 18:48, 4F

06/18 20:50, 5年前 , 5F
我覺得gcc難入手許多 常常想要理解某個API的用途就花很
06/18 20:50, 5F

06/18 20:52, 5年前 , 6F
多時間 巨集重重 模組化沒llvm清楚 有時候想用gdb也沒方
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
這是小弟最近入門llvm所記錄的一些心得
06/27 12:54, 9F

06/27 12:55, 5年前 , 10F

06/30 06:33, 5年前 , 11F
這篇值得自m
06/30 06:33, 11F

07/10 21:05, 5年前 , 12F
太晚發現這個版了,好多有用的資訊,推
07/10 21:05, 12F
文章代碼(AID): #1UwQKTjM (CompilerDev)