GCC15版本新特性介绍
概述
GCC(GNU Compiler Collection)是一套由GNU开发的编程语言编译器,支持C、C++、Fortran、Java等多种编程语言。GCC 15 是 GCC 编译器的最新版本,带来了一系列新特性和改进,提升了编译器的性能和功能。
当前GCC15尚未发布,在2025.1.13号进入了Stage 4阶段,预计在2025年第二季度发布正式版本。
GCC版本发布周期
主分支的开发将分三个阶段进行。
阶段名称 | 描述 |
---|---|
Stage 1 | 在此期间,可以对编译器进行任何性质的改变。特别是,主要更改可能从分支合并。第一阶段以功能驱动,将持续至少四个月。为了避免混乱,发布经理将在这一阶段开始之前要求提交即将发布的发布周期中提议的主要项目列表。他们将尝试以最小干扰的方式对项目进行排序。发布经理不会拒绝在第一阶段结束前准备就绪的项目。同样,发布经理没有特殊权力接受特定的补丁或分支,这超出了他们作为维护者的地位。发布经理的角色仅仅是尝试以有组织的方式安排主要功能的包含。 |
Stage 2 | 第二阶段已被放弃,转而采用 GCC 4.4 开发后的扩展特性第一阶段。 |
Stage 3 | 在这两个月期间,可能进行的唯一(非文档)更改是修复错误或不需要更改编译器其他部分的新的端口。在此期间不得引入新功能。 |
Stage 4 | 在此期间,可能进行的唯一(非文档)更改是修复回归的更改。其他重要错误,如错误代码、拒绝有效或构建问题也可能得到修复。在此期间的所有更改都应格外小心,以避免引入新的回归——不惜一切代价修复错误是不希望的。请注意,相同的约束也适用于发布分支。此期间将持续到下一发布周期的第 1 阶段开启。 |
当前GCC15的发布进度如下
| |
C++提案实现进度
C++标准 | 提案编号 | 提案 | 描述 |
---|---|---|---|
C++26 | P2558R2 | Add @, $, and ` to the basic character set | 将 @ 、$ 和 ` 这三个字符添加到 C++ 的基本字符集中,增强代码表达灵活性 |
C++26 | P2662R3 | Pack indexing | 引入包索引功能,允许通过索引访问可变参数模板参数包中的特定元素,简化代码逻辑 |
C++26 | P0609R3 | Attributes for structured bindings | 可以为结构化绑定中的单个变量添加属性,如((maybe_unused)) ,方便标记仅用于调试日志等情况的变量 ,避免在发布构建中因未使用变量产生警告。 |
C++26 | P2573R2 | = delete(“reason”); | 支持在 = delete 语法时添加原因说明,让代码意图更清晰 |
C++26 | P2893R3 | Variadic friends | 引入可变参数友元概念,可接受可变数量模板参数,使友元关系定义更灵活 |
C++26 | P3034R1 | Disallow module declarations to be macros | 禁止将模块声明定义为宏,保证模块声明清晰性和一致性,避免宏替换潜在问题 |
C++26 | P2747R2 | constexpr placement new | 支持常量表达式放置新,可在编译时进行对象构造,提高程序性能和可预测性 |
C++26 | P0963R3 | Structured binding declaration as a condition | 允许将结构化绑定声明用作条件表达式,简化代码书写 |
C++26 | P3144R2 | Deleting a pointer to an incomplete type should be ill - formed | 规定删除指向不完整类型的指针为格式错误,增强代码安全性 |
C++26 | P3176R0 | Oxford variadic comma | 废弃不带前逗号的省略号参数。语法 (int…) 与 C 不兼容,对 C++有害,且可轻易替换为 (int, …) |
C++26 | P2865R5 | Removing deprecated array comparisons | 移除已弃用的数组比较方式,促使开发者使用更安全、现代的数组操作方式 |
C++23 | P2615R1 | Meaningful exports | 实现有意义的导出功能,让模块导出更直观,使模块接口设计更清晰 |
C++23 | P2718R0 | Wording for P2644R1 Fix for Range - based for Loop | 对 P2644R1 修复基于范围的 for 循环的标准措辞进行明确和规范 |
其他特性
- 内联汇编语句现在支持类似于 static_assert 的 constexpr 生成的字符串。
- 在解析模板时,现在会主动诊断当前实例化中的限定名称查找失败(例如 this->non_existent)。
- 新增了 -fassume-sane-operators-new-delete 选项,并默认启用。该选项允许控制对可替换的全局 new 和 delete 运算符调用的某些优化。如果程序重写了这些可替换的全局运算符,且替换后的定义会读取或修改对程序其他部分可见的全局状态,则可能需要使用 -fno-assume-sane-operators-new-delete 选项来编译程序。
- 支持 std module