FinOps有望降低企业50%+的云成本! 了解详情
写点什么

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

  • 2017-05-11
  • 本文字数:1070 字

    阅读完需:约 4 分钟

据 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-05-11 19:002866
用户头像

发布了 227 篇内容, 共 68.7 次阅读, 收获喜欢 26 次。

关注

评论

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

ARTS Week13

丽子

本周学习总结

饺子

数据库技术丨GaussDB(DWS)数据同步状态查看方法

华为云开发者联盟

数据库 高可用

区块链将这样影响你的生产生活

CECBC

区块链 信息发展

研发和测试在多国陆续展开 全球央行数字货币研发驶入快车道

CECBC

数字货币 金融

架构师训练营第一期-第四周学习总结

卖猪肉的大叔

极客大学架构师训练营

阿里内部绝密《百亿级并发系统设计》实战教程,冒着被劝退的风险免费分享

Java架构之路

Java 阿里巴巴 程序员 面试 编程语言

上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间

Java架构师迁哥

《Linux学习笔记》从常用命令、常用操作到网络管理、性能优化

Java架构之路

Java Linux 程序员 面试 编程语言

京东区块链之供应链应用篇:溯源应用结合区块链能碰撞出什么火花?

京东科技开发者

区块链 供应链

架构师训练营第 1 期第四周总结

Leo乐

极客大学架构师训练营

通证、通证经济与区块链

CECBC

区块链 通证经济

架构师训练营第一期-第四周课后作业

卖猪肉的大叔

极客大学架构师训练营

Vidyo整个产品架构是怎样的?

dwqcmo

音视频 集成架构 解决方案 智能硬件

《Java核心技术总结》+《面试题总结》PDF整理,阿里P8大牛熬了半个月肝出来的!

Java架构之路

Java 阿里巴巴 程序员 面试 编程语言

Flink处理函数-6-4

小知识点

scala 大数据 flink

MySQL-技术专题-SQL优化系列

洛神灬殇

有符号类型引发的奇怪现象

jiangling500

Java 中的反射是什么

Rayjun

Java 反射

第四周作业

icydolphin

极客大学架构师训练营

你掉进过“伪敏捷”的陷阱吗?

华为云开发者联盟

项目管理 软件 敏捷

看看专科程序员与本科程序员之间,到底有什么区别?

Java架构师迁哥

如何设计一个牛逼的API接口

Java旅途

Spring Boot API

架构师训练营第四周作业

Shunyi

极客大学架构师训练营

从格力直播看品牌商的渠道变革

boshi

数字化转型 品牌 直播带货 优化业务

Go 语言内存管理三部曲(二)解密栈内存管理

网管

堆栈 内存管理 内存布局 Go 语言

大型互联网应用系统的技术方案和手段

饺子

5张表的sql整懵阿里p7:你们能看明白自己写的啥吗?

小Q

MySQL 数据库 学习 调优 mycat

阿里云服务器搭建

时间是一个人最好的证明

阿里云 服务器 域名

架构师训练营 1 期 - 第四周 - 系统架构

三板斧

极客大学架构师训练营

第四周学习代码系统架构总结

三板斧

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
GCC 7.1发布,完全支持C++17_开源_Sergio De Simone_InfoQ精选文章