經過一年的緊張開發, 新版 «GCC 15.1» 發布, 它被定位為這個流行的開源編譯器套件的新 15.x 分支中的第一個穩定版本。
此次發布不僅正式啟動了新的 GCC 15 系列,也標誌著 GCC 16 開發準備工作的開始,因為 16.0 分支已經並行分叉,並將為下一個主要版本 GCC 16.1 奠定基礎。
GCC 15.1主要新功能
此新版本中最顯著的變化之一是 GCC 15.1 採用C23標準 作為編譯 C 程式碼的預設值, 使用 -std=gnu23 選項。 本次更新取代了先前預設使用的標準C17(-std=gnu17),並引入了新標準的許多新功能。其中有 常數 nullptr、型別 _BitInt(n) 以及關鍵字 bool、true 和 false,這可能會與遺留程式碼中現有的識別碼發生衝突。
GCC 15.1 的另一個新功能是 #embed 指令嵌入二進位數據, 以及無序和可重複等屬性,這些屬性可以更好地控制執行順序和確定一致的結果。此外,未來 C2Y 標準的元素已經實現,例如在 if 條件中宣告的變數、case 語句中的值範圍、虛數字尾 i 和 j,以及應用於複數的運算子 ++ 和 — 的支援。
C++ 與未來 C++26 的改進
就 C++ 語言而言,新版的 GCC 15.1 實作了 C++26 標準中正在討論的功能, 因為引入了新功能,例如「朋友」運算子、將 constexpr 與新運算子的變體一起使用,以及對結構化連結和屬性的語法的改進,例如用於保證尾部遞歸的 musttail。
C++23 支援也得到了擴展 其中包括使用導出的新規則、處理臨時物件的改進以及 libstdc++ 中 std 和 std.compat 模組的實驗性實作。此外,由於模板雜湊系統更加高效,聯合初始化的安全性得到加強,程式碼編譯也得到改善。
靜態分析中的新警告與改進
的製度 靜態分析進行了視覺重新設計 透過符號突出問題, 遷移到 C23 的技巧以及新的 libgdiagnostics 庫 這允許在其他項目中重複使用診斷邏輯。還引入了對生成 SARIF 格式報告的支持,以促進與現代程式碼分析工具的整合。
在 現有警告已新增至新警告中, 作為 -Wanalyzer-未定義行為-ptrdiff 檢測不相關指針之間的減法,-Wtrailing-whitespace 和 -Wleading-whitespace 表示不必要的空格,以及 –Wheader 守衛 偵測標頭包含保護中的錯誤。
優化和支援
其中值得注意的最佳化包括: 包含 LTO 的增量編譯模式 (連結時最佳化),旨在加快變化最少時的重新編譯速度。還 循環向量化得到改進,即使在編譯時不知道數組大小的情況下,也可以提高編譯非常大檔案的速度。
在支援方面,AArch64 新增了 ARMv8 擴展, 支援 Apple M3 等新 CPU, Cortex-X925 和 NVIDIA Grace,並擴展了 MinGW 平台。 AMD Radeon GPU 的程式碼產生功能得到增強 對新 GFX9、GFX10.3 和 GFX11 系列的實驗性支持。對於 x86 架構,啟用對 AVX10.2 和新 AMX 指令的支持,並停止對 Xeon Phi Knights 的支援。
另外, GCC 15.1 引進了 COBOL 編譯器 (gcobol),支援 x86-64 和 AArch64 架構,並更新了 D 語言的實作(版本 2.111.0)。增加了對 Fortran 中無符號整數的支持,並推進了 OpenMP 5.0 到 6.0 的採用,包括互通性的改進和 GPU 上記憶體的統一使用。