GCC 6.1 带来新的 C++17 特性、完全支持 OpenMP、改进了 OpenACC。
6.1 版本是 GCC 一年多来的第一次重大发布。据 GCC 维护者 Jakub Jelinek 介绍,该版本包含大量的新功能,包括新的 C++17 特性、完全支持 OpenMP 以及改进 OpenACC 支持。
以下是 GCC 6.1 引入的其中一些最重要的变化:
- C++ 编译器现在默认为
-std=gnu++14
,而不是std=gnu++98
; - 改进诊断功能,包括改进位置、位置范围、标识符拼写错误改进建议、修复提示和新的警告;
- 改进优化器。这影响了程序内优化、程序间优化、链接时间优化和各种目标后台;
- 扩展后的 C++ 编译器支持预计会在 C++17 中新增的特性,比如混合表达式、
u8
字符字面量和嵌套命名空间定义。此外,它还支持 C++ concepts ——一个尚未正式包含在C++17 中的特性——和 C++ 事务型内存。类似地,C++ 标准库经过了扩展,支持诸如 std::uncaught_exception 、 std::invoke 、 std::shared_mutex 这样的 C++17 特性; - 完全支持 Open Multi-Processing(OpenMP) 4.5 规范,这是一个为多平台共享内存多道处理而设计的 API;
- 改进对 OpenACC 2.0a 规范的支持,这是一个由 Cray、CAPS、Nvidia 和 PGI 开发的编程标准,旨在简化异构 CPU/GPU 系统的并发编程。
为了让开发人员能够更轻松地将现有代码移植到 GCC 6.1,GCC 团队还发布了一份指南,详细描述了可能出现的主要问题,并提供了解决方案。举例来说,这包括:
- 选择恰当的
-std
选项,以便使用所需的标准版本; - 使用在不同标准版本中有不同行为的特性时发出警告,比如析构函数的
noexcept
异常规范,或者完全禁止,比如在需要指针的地方使用false
,等等。
GCC 的最新版本可以从 GNU 镜像列表中的任何一个镜像下载,在子目录gcc/gcc-6.1.0/
下。
查看英文原文: GCC 6.1 Brings New C++17 Features, Full Support for OpenMP, Improves OpenACC
评论