跳轉到內容

GNU C 編譯器內部/簡介

來自華夏公益教科書

什麼是 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 安裝手冊。
華夏公益教科書