跳轉到內容

GNU C 編譯器內部

25% developed
來自華夏公益教科書

什麼是 GCC?

[編輯 | 編輯原始碼]

GNU 編譯器集合 (GCC) 是一個自由軟體專案,包括針對AdaCC++FortranJavaObjective-C的編譯器,以及這些語言的庫。它能夠為各種平臺生成可執行檔案,包括各種平臺,例如x86ARMMIPSPowerPC等。

GCC 的歷史

[編輯 | 編輯原始碼]

GCC 的主頁是http://gcc.gnu.org。GCC 的現代歷史始於 GCC 2.95 版本。該版本於 1999 年 7 月 31 日釋出。GCC 3.0 被認為是 C++ 編譯器的現代歷史,於 2001 年 6 月 18 日釋出。後來建立了額外的分支。截至目前,活躍的開發分支是 GCC 3.4,最新版本釋出於 2005 年 11 月 30 日,以及 GCC 4.0,最後一次釋出於 2005 年 9 月 28 日。GCC 4.1 於 2006 年 2 月 28 日釋出。GCC 4.2 是 GCC 的開發分支。原始碼倉庫可線上獲取。GCC 4.2(主幹)是唯一進行真正開發和新增新功能的地方。

GCC 已在工業界和學術界流行起來。其原始碼的可用性使人們可以向編譯器新增新功能。GCC 用於幾個基於原始碼的安全專案,即在使程式更安全的工具中對程式的原始碼進行檢測。然而,到目前為止,描述 GCC 內部結構的文件很少。

當實現新功能時,會直接修改 GCC 的原始碼。但是,這些編譯器擴充套件很難分發,因為 GCC 是一個非常大的程式。建立模組化擴充套件的框架將極大地簡化編譯器擴充套件的開發。

GCC 4.0 及更高版本包括 SSA 最佳化器,應將其用於進一步的高階最佳化和轉換。RTL 級別應僅用於特定於目標的最佳化和低階最佳化,例如排程。在一些人看來,任何低於 4.0 的 GCC 都是一個過時的舊編譯器,已經顯露出其時代特徵。

本書的目的

[編輯 | 編輯原始碼]

本書的目的是滿足 GCC 駭客的需求。我們從描述GCC 3.4.1 架構開始,重點介紹原始碼解析器。我們選擇此版本的 GCC 是因為我們主要使用該版本。然後我們解決擴充套件開發的問題。我們將在下一章介紹GCC 可擴充套件模組 (GEM) 專案。GEM 在整個 GCC 原始碼中提供了一系列掛鉤。它作為 GCC 的補丁實現。基於 GEM 的編譯器擴充套件開發為一個獨立的程式。當擴充套件完成時,與不使用 GEM 時分發 GCC 的原始碼相比,只需分發其原始碼即可。我們將在本書結尾給出演示 GEM 程式設計的示例。

要點: 本書是什麼:面向擴充套件程式設計師的 GCC 內部結構指南。介紹了用於開發模組化擴充套件的 GEM 框架。本書不是什麼:程式語言參考手冊,GCC 安裝手冊。


本書描述了 GCC 的兩個版本:3.4 和 4.1。


華夏公益教科書