GNU编译器集合(GCC)的最新版本发布,这标志着向C++的迁移已经完成。这一过程持续了多年,GCC团队指出,为了有一个可维护的代码基来吸引并留住新的项目成员,这种迁移是必要的。之所以选择C++,部分原因是它是标准化的语言,而且 "支持更干净的代码,更容易编写并保证清晰的接口……尽管这并非灵丹妙药,但相对于基于C的遗留代码,的确是种改进”。对大部分开发者来说,最终结果不过是,如果有兴趣从源代码构建GCC 4.8,则必须使用支持C++ 2003的编译器。该版本设计得更为高效,更容易更新,普通用户可以直接受益。
新的编译器特性
首先介绍一下通用的编译器改进,该版本“引入了一个新的通用优化层,既满足了快速编译和极佳调试体验的需要,又保证了合理的运行时性能”。此外,4.8包含了用于探测内存错误的AddressSanitizer,以及支持插入指令检查数据竞争的ThreadSanitizer。(ThreadSanitizer目前只能用于x86-64 GNU/Linux。)
值得注意的是,该版本还支持64位ARM(AArch64)和32位ARMv8等架构。
特定于语言的改进
完成了向C++的迁移,这并不是唯一值得赞赏的成绩,编译器在其他一些方面还有不少改进。GCC目前初步在多种架构上实现了针对GNU/Linux和Solaris等平台的Go 1.1支持。如果使用Fortran和C进行开发的话,也有一些更新值得研究一番。
C++用户会看到如下对C++11支持的改进:
- thread_local关键字
- attribute语法
- 对齐说明符(alignment specifier)
- 继承构造函数
- forward_list满足了能够感知分配器(allocator-aware)的容器这一需求
与Clang 3.2相比,GCC 4.8对C++11的支持也非常不错,而且都领先于最新的Visual C++ Compiler November 2012 CTP。新增了编译选项-std=c++1y,支持对下一个主要标准(预计大约在2017年)提出的特性进行实验,这意味着应对未来C++变化的计划已经开始。
C++运行时标准库(libstdc++)对C++11有了更大的支持,改进了随机数生成器(包括新的X86处理器上的硬件支持),并加入了新的随机数分布。