GCC 4.8发布,完成向C++的迁移

GNU编译器集合(GCC)的最新版本发布,这标志着向C++的迁移已经完成。这一过程持续了多年,GCC团队指出,为了有一个可维护的代码基来吸引并留住新的项目成员,这种迁移是必要的。之所以选择C++,
部分原因是它是标准化的语言,而且
“支持更干净的代码,更容易编写并保证清晰的接口……尽管这并非灵丹妙药,但相对于基于C的遗留代码,的确是种改进”。对大部分开发者来说,最终结果不过
是,如果有兴趣从源代码构建GCC 4.8,则必须使用支持C++
2003的编译器。该版本设计得更为高效,更容易更新,普通用户可以直接受益。

澳门新葡亰 1

新的编译器特性

GNU 项目今天发布了GCC 4.7 正式版本。GCC,是一套由 GNU
开发的编程语言编译器。GCC 使用 GPL 与 LGPL 许可证,是 GNU
计划的关键部分。GCC 目前可处理
C++、Fortran、Pascal、Objective-C、Java以及 Ada 等语言。现在是
Linux/Unix、Mac 等操作系统的标准编译器。
该版本在4.6.x的基础上,进行了大量的改进,现在C、C++和Fortran编译器支持3.1版本的OpenMP规范。该版本还针对各个语言进行了功能改进,主要包括:针对C的功能改进支持ISO
C11标准中的更多特性。除了之前的-std=c1x和-std=gnu1x选项外,GCC现在还支持-std=c11和-std=gnu11选项。针对C++的功能改进G++现在支持-std=c++11、-std=gnu++11和-Wc++11-compat选项,这些选项的作用相同。实现了C++11的extended
friend语法。实现了C++11的重写控制。实现了C++11的非静态数据成员初始化。实现了C++11的用户定义数据标识。实现了C++11的别名声明。实现了C++11的委托构造函数。针对运行时库的改进实验性地支持新的ISO
C++11标准。增加了–enable-clocale=newlib配置选项。用于无序关联容器的调试模式迭代器。通过包含unistd.h来避免破坏全局命名空间。针对Go语言的改进现在GCC实现了Go1语言标准,目前对于Go的支持尚不完全,预计将在4.7.1版本中进行改善。Go已经在GNU/Linux和Solaris平台上进行了测试,在其他平台中也可能会很好地运行。关于改进的详细信息可参阅:GCC
4.7 Changes使用GCC
4.7的一些注意事项:
一些针对旧系统的支持功能以及最近没有被维护或检验的GCC目标端已经被放弃,在下个版本中将会永久删除这些代码。AVR端的libgcc已得到改善,它的multilib架构得到了增强。因此,所有应用程序的对象必须在GCC
4.6.x或4.7.0中进行编译。从之前GCC版本迁移至4.7版,可参阅:迁移指南GCC
4.7下载

首先介绍一下通用的编译器改进,该版本“引入了一个新的通用优化层,既满足了快速编译和极佳调试体验的需要,又保证了合理的运行时性能”。此外,4.8包含了用于探测内存错误的AddressSanitizer,以及支持插入指令检查数据竞争的ThreadSanitizer澳门新葡亰,。(ThreadSanitizer目前只能用于x86-64
GNU/Linux。)

值得注意的是,该版本还支持64位ARM(AArch64)和32位ARMv8等架构。

特定于语言的改进

完成了向C++的迁移,这并不是唯一值得赞赏的成绩,编译器在其他一些方面还有不少改进。GCC目前初步在多种架构上实现了针对GNU/Linux和Solaris等平台的Go
1.1支持。如果使用Fortran和C进行开发的话,也有一些更新值得研究一番。

网站地图xml地图