
王亞剛
本書將圍繞GCC編譯過程,詳細介紹從源代碼到AST、從AST到GIMPLE、從GIMPLE到RTL,以及從RTL到最終的目標機器彙編代碼的詳細過程,涉及各個階段中間表示的詳細分析、生成過程。本書提供了大量的圖表和實例,展示了GCC編譯系統的總體工作流程和工作細節。本書的另外一個特點是結合GCC 4.4.0的源代碼進行分析,使讀者在瞭解編譯原理的基礎上進一步掌握其實現的總體流程和細節,讓更多讀者對編譯技術的認識不再只停留在理論層面,而是向其展示一個編譯系統實例的實現過程。在編寫這本書的時候,有一種精神支撐着我,我相信“興趣”加上“堅持”就是勝利!分析GCC不是一年半載的事情,需要3年、5年,甚至更長時間,不過我可以堅持,我要用我的堅持換來對GCC的深入分析,讓更多的GCC愛好者熟悉它、接觸它、瞭解它,更多地參與GCC的開發與維護。
一直以來都對GCC的實現很感興趣,但是它龐大的代碼量和複雜的文件組織讓人望而卻步。雖然一直也在讀相關資料,但是沒有機會系統地進行分析。在本書的幫助下,得以揭開它神祕的面紗。該書粘貼了大量代碼,有充數之嫌,而且關鍵的一些數據結構沒有講清楚,比如用於存儲AST和token的全局變量,讀完似懂又非懂;可取之處,在於可以快速入門,同時用作工具書籍。建議配合着網上的一些博客一起看,效果更佳。 仔細閱讀了GCC中處理c family的代碼後,五味雜陳,尤其其代碼風格更是一言難盡,我很擔心GCC還能不能跟得上C++標準的快速迭代…..
雖然有些地方講得還是不夠明白,不過還是收益不少
這本書內容成書於2016年。在2016年時,gcc已經到了5版本,完全支持了c++11,和4.4大爲不同。64位架構已經成爲主流。clang和llvm也已經異軍突起(clang和llvm模塊化做的很好,其實更有利於分析,不知道作者沒什麼沒考慮)。而這本書的參考內容最晚的也是2012年的,主要的文獻還是1990-2006這段時間,在選型上,看不出來選擇老舊技術的原因何在。 另外,很多內容就是單純介紹了做了什麼。但是卻沒講爲什麼這麼做。書裏用了大量的篇幅整段整段粘貼代碼,在互聯網發達的今天,不知這樣行文意義何在。 最後,介紹的所謂paag處理器移植,結構十分簡單,似乎是學生作業作品,而且工程方面的東西着墨不多,似乎這一部分不是作者自己動手完成的。 總體而言,這本書的內容,和標題是有一定差距。對於實際價值,主要在於可以瞭解一下如何去調試gcc,其他的內容,還是遇到的時候自己去翻代碼吧。
本書結合GCC4.4.0源代碼,圍繞GCC編譯過程,詳細介紹了GCC的設計框架和實現過程,包括從源代碼到AST、從AST到GIMPLE、從GIMPLE到RTL,以及從RTL到終的目標機器代碼的詳細過程,涉及各個階段中間表示的詳細分析、生成過程,使讀者在瞭解編譯原理的基礎上進一步掌握其實現的總體流程和實現細節,讓更多的讀者對編譯技術不再只是停留在理論層面,而是學會如何實現一個編譯系統實例。
給個4星,雖然對絕大多數人而言,這本書裏的絕大多數內容都不必瞭解。
是一本瞭解gcc internal的好書!
對gcc源碼分析相當深入,不過一般很少用到這麼底層
值得一看,跟着做一遍,再動手自己實現一遍能收穫很多