提前锁票 InfoQ 最具价值感的视频栏目 | InfoQ 大咖说 了解详情
写点什么

GCC 7.1 发布,完全支持 C++17

2017 年 5 月 11 日

据 GCC 的维护者 Jakub Jelinek所写,在GNU 编译器套件集GCC 的最新主版本(Majoir Release)GCC 7.1 中,提供了丰富的新特性,包括:对当前 C++17 草案的实验性支持、更好的诊断能力以及新的优化技术。

总所周知,GCC 的稳定版(Stable Release)是从x.1 开始编号的,而版本号x.0 是为候选版(Release Candidate)预留的。因此,GCC 7.1 是GCC 7 的首个稳定版。

正如前面所提到的,GCC 7.1 中的C++ Front End 提供了对当前C++17 草案的支持,所支持的特性包括constexpr、类模板参数推导(template argument deduction)、自动模板参数和结构化绑定等。GCC 7.1 同时支持 -std=c++1z-std=gnu++1z编译器标识。在 C++ 的状态页面中,列出了 C++ Front End 中的所有新特性。正如 InfoQ在前期所报道的,ISO C++ 委员会已于近期完成了对C++17 的定义工作,只待得到组织中各国家机构的批准。

GCC 7 还对优化器进行了改进,其中包括一些新的过程内和过程间优化,例如:

  • 循环切分(Loop splitting),编译器选项为 -fsplit-loops。在一些循环中,包含对一部分代码永真而对其余代码永假的条件,该优化选项适用于这样的循环。
  • 值范围(Value range)和按位常量传播(Constant Propagation),编译器选项分别为 -fipa-vrp 和 -fipa-bit-cp。它们分别用于在调用关系图中传播变量所属范围的知识,以及变量中值为零的比特位的位置信息。
  • 代码提升(Code hoisting),编译器选项为 -fcode-hoisting。一个函数可能存在多个尽早退出的执行路径,该选项通过在所有这些路径上对表达式求值,改进了部分冗余消除(partial redundancy elimination)过程。
  • 域外地址纠错(Out-of-scope address sanitization),编译器选项为 -fsanitize-address-use-after-scope。用于纠错在定义范围之外的地址上使用的变量。例如:
复制代码
int main (int argc, char **argv) {
char *ptr;
{
char my_char;
ptr = &my_char;
}
*ptr = 123; // 这里,变量 my_char 的地址无效。
return *ptr;
}
  • 通用向量操作的算术溢出,编译器选项为 -fsanitize=signed-integer-overflow。

在诊断方面,GCC 7.1 改进了错误定位、错误定位范围、对错误拼写的标识符提出建议、选项名称和修复性(fix-it)提示,并给出了新的告警信息。

最后应注意的是,GCC 7.1 中的一些改进可导致使用以前版本正常编译的C++ 代码出现编译不通过的问题。涉及的改进包括:更严格的模板规则、对操作符名字修饰(name mangling)转换的改进等。

GCC 7.1 的全部改进列出于更新日志中。GCC 7.1 可以从 GNU FTP 服务器下载。

查看英文原文: GCC 7.1 Released With Full C++17 Support

2017 年 5 月 11 日 19:002117
用户头像

发布了 226 篇内容, 共 60.0 次阅读, 收获喜欢 15 次。

关注

评论

发布
暂无评论
发现更多内容

Flutter Bloc模式

码爷

flutter ios 程序员

轻松云上揽胜中华,靠的就是这份聪明的“地图”!

华为云开发者社区

MySQL 数据库 postgresql AI 地图

手把手教你本地 k8s 集群搭建云原生 Tekton CICD 流水线

比伯

Java 大数据 编程 架构 计算机

一个技术总监的忠告:精通那么多技术,你为何还是受不到重用?

四猿外

程序人生 技术管理 加薪 职场成长 源码阅读

JVM真香系列:方法区、堆、栈之间到底有什么关系

田维常

Java JVM 堆栈 方法区 Java虚拟机

数字投票时代即将到来

CECBC区块链专委会

数字投票

2 w字长文带你深入理解线程池

Java架构师迁哥

加快脑动脉瘤检测,AI来了

华为云开发者社区

人工智能 学习 算法 华为云 医疗AI

握草!美团P8整理的280页超详细Docker实战文档简直太香了,让你对如日中天的Docker有更深入的了解。

Java架构之路

Java 程序员 架构 面试 编程语言

文科妹子都会用 GitHub,你这个工科生还等什么

沉默王二

GitHub

AliP9整理出微服务笔记:Spring微服务不止架构和设计

周老师

Java 编程 程序员 架构 面试

当我们在讨论实时性的时候,我们在讨论什么?

VoltDB

数据分析 5G 工业互联网

低代码开发平台核心功能设计——组件自定义交互实现

徐小夕

前端 编辑器 H5 大屏可视化 lowcode

Pulsar Summit Asia 2020 | 主题演讲:大咖呈现,紧扣社区

Apache Pulsar

大数据 开源

区块链有了几个新“标准”!

CECBC区块链专委会

区块链 版权保护

LeetCode题解:剑指 Offer 22. 链表中倒数第k个节点,双指针,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

java-File对象

Isuodut

Dubbo-go Client端调用服务过程

apache/dubbo-go

dubbo dubbo-go dubbogo

双11购物节国外剁手党同狂欢 阿里云视频云电商直播实时字幕

阿里云视频云

云直播 直播 直播带货 语音识别

《精通Tomcat:Java Web应用开发、框架分析与案例实战》.pdf

田维常

tomcat

美国区块链政策大盘点

CECBC区块链专委会

区块链 政策 货币

企业级软件的核心价值

Philips

敏捷开发 企业应用

架构师训练营第八周

我是谁

极客大学架构师训练营

HTTPDNS开源 Android SDK,赋能更多开发者参与共建

应用研发平台EMAS

android 阿里云 开源 httpdns 移动研发平台

高交会科技盛宴:“科技改变生活,创新驱动发展”

WX13823153201

高交会

数据结构与算法系列之递归(GO)

书旅

go 数据结构与算法

【Swift实现代码】iOS架构模式之MVP

码爷

ios swift 架构

如何预防工业物联网中的恶意攻击?

VoltDB

大数据 数据分析 5G 工业互联网

这份笔记我必啃完!美团T9首发内部JVM高级特性笔记,差距不止一点点

Java架构追梦

Java 源码 架构 面试 JVM

祝贺 StreamNative 团队成员 Jennifer 当选 Apache Pulsar PMC 成员

Apache Pulsar

大数据 开源 Apache Pulsar

接口文档生成详细教程

测试人生路

接口文档

打造 VUCA 时代的 10 倍速 IT 团队

打造 VUCA 时代的 10 倍速 IT 团队

GCC 7.1发布,完全支持C++17-InfoQ