经过一年的紧张开发, 新版本 «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 上内存的统一使用。