作者:慕容渊
链接:https://www.zhihu.com/question/43538570/answer/111482841
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
書已經到手。先大致翻了一下。
既然如此,那也就說幾句吧。
我翻過(是翻過,不是翻譯過,抱歉,辜負了大家的期待)的編譯書籍有好幾本了,龍書自不必說,一些實踐性的書籍也翻過,拜一些淺白的書籍所賜,實現一個腳本語言處理器什麼的是可以做到的,而且確實照着別人的書籍抄來並實現過。除此之外,LISP系的當然也接觸過,至於實現函數式的語言,讀王垠的《怎樣寫一個解釋器》便已可入門,當然,認真點的話,什麼SICP,EOPL,schemer 三部曲都是要讀的 -- 這些有的在我的計劃中,还沒讀完,所以我也就不評論這些書籍怎樣怎樣了。
如樓上各位同學所言,《編譯系統透視》這本書,雖是鴻篇巨制不錯,但重點在gcc的實現,而且是重前端不重後端(至少篇幅上來說是這樣)。
先說這本書的優點。
1. 圖文並茂是真的。講的似乎也很淺白易懂。看得出來寫得還是很用心的,圖真的好詳細,配合代碼注釋,只要讀者願意花時間,看不懂簡直是不可能的。不過如前面幾位大大所講,排版還有待進步就是了。
2. 解讀的實例是 gcc, 盡管現在 LLVM 各種叫囂,但是目前爲止,gcc 仍是我們這個時代最重要的計算機技術的基石。對於想要了解 gcc 內部實現的同學來說,確實是再好也沒有了。不過說真的,應該是比較舊的 gcc 版本了吧。
3. 順帶也講了些匯編器和鏈接器的事情。
不過這書的缺點也是蠻多的:
1. 翻了找了一會子,只看到作者吹牛逼,但沒提及網路資源究竟放在哪讓讀者去獲取(是,承認你們有水平,有幹貨,但是我要資源和說明...)。
2. 同樣書中似乎也沒明確說明解讀的 gcc 源碼是哪一個版本。應該是比較舊的版本了吧,前面講運行時環境那些對我來說基本是廢話了的東西,看了下基本是 32 位的東西了,實際上 64 的調用約定已經不是 32 位調用約定那樣了。而且標題是運行時環境,正確的結構應該是C語言的運行時環境 -> 基於x86_32構架的調用約定。x86_64的呢...
3. 嗯,根據篇幅來看,後端的優化講得不多。由於前端是針對 gcc 的代碼,所以真的要很耐心地啃。可是如果只是想要實現一門簡單的腳本的話,可以用很多更簡單的技術手段的... 私以爲,除了像C++這麼變態的語言,前端真的不是重點。
總的來說,這本書在實踐方面稱得上是奇書一本了,但結構、理論補充方面確實有待改善。這也就使得,這本書雖然給出了很多很多的實踐細節,但在理論上做不到取代原龍書的位置,雖然封面上印的是中國龍。不過也算各有所長吧。原龍書還是必要的哈哈哈哈哈,你知道原龍書爲什麼很屌嗎,原因就是它啥都說一點又啥都沒說似的哈哈哈哈哈。
至於想把這本書當成編譯原理入門的書籍來看,個人覺得還是算了,因爲這書可能會花不少時間,如果你不是真的想維護 gcc 什麼的,花這麼多時間來學習 gcc (而且是一個舊版本的)前端的意義並不是那麼大。當然 gcc 畢竟是工業級,有空研究一下還是不錯的,比如裏面的 gimple 什麼的。
所以如果想要入門編譯原理,建議還是先大致過一下原龍書哪類書籍,看原龍書的時候不必什麼細節都摳,有個大概輪廓甚至不求甚解問題都不大,然後再看類似《自制編程語言》什麼的,如果實在是想要做編譯型的語言,也有《編譯器設計之路》(同樣也是完整給出了一個C語言實現,但要薄很多)這樣的書籍供你選擇。
以上。