GNU編譯器集合(GCC)的最新版本發布,這標誌著向C++的遷移已經完成。這一過程持續了多年,GCC團隊指出,為了有一個可維護的代碼基來吸引並留住新的項目成員,這種遷移是必要的。之所以選擇C++,部分原因是它是標準化的語言,而且
"支援更乾淨的代碼,更容易編寫並保證清晰的介面……儘管這並非靈丹妙藥,但相對於基於C的遺留代碼,的確是種改進”。對大部分開發人員來說,最終結果不過是,如果有興趣從原始碼構建GCC 4.8,則必須使用支援C++ 2003的編譯器。該版本設計得更為高效,更容易更新,普通使用者可以直接受益。
新的編譯器特性
首先介紹一下通用的編譯器改進,該版本“引入了一個新的通用最佳化層,既滿足了快速編譯和極佳調試體驗的需要,又保證了合理的運行時效能”。此外,4.8包含了用於探測記憶體錯誤的AddressSanitizer,以及支援插入指令檢查資料競爭的ThreadSanitizer。(ThreadSanitizer目前只能用於x86-64
GNU/Linux。)
值得注意的是,該版本還支援64位ARM(AArch64)和32位ARMv8等架構。
特定於語言的改進
完成了向C++的遷移,這並不是唯一值得讚賞的成績,編譯器在其他一些方面還有不少改進。GCC目前初步在多種架構上實現了針對GNU/Linux和Solaris等平台的Go 1.1支援。如果使用Fortran和C進行開發的話,也有一些更新值得研究一番。
C++使用者會看到如下對C++11支援的改進:
- thread_local關鍵字
- attribute文法
- 對齊說明符(alignment specifier)
- 繼承建構函式
- forward_list滿足了能夠感知分配器(allocator-aware)的容器這一需求
與Clang 3.2相比,GCC 4.8對C++11的支援也非常不錯,而且都領先於最新的Visual
C++ Compiler November 2012 CTP。新增了編譯選項-std=c++1y,支援對下一個主要標準(預計大約在2017年)提出的特性進行實驗,這意味著應對未來C++變化的計劃已經開始。
C++運行時標準庫(libstdc++)對C++11有了更大的支援,改進了隨機數產生器(包括新的X86處理器上的硬體支援),並加入了新的隨機數分布。
查看英文原文:GCC
4.8 Completes Move to C++