GCC 5.1正式发布

GNU项目组近期宣布正式发布GCC 5.1。GCC 5的第一个主要版本增加了许多新特性和改进,例如:改进对C++11/14的支持,libstdc++库默认使用全新ABI,一个机器码即时编译嵌入库。

GCC 5.1中引入的最重要的变化:

  • ANSI批准的C标准gnu89太过于古老,新版本中采用gnu11作为默认的C编译器。
  • 在其它方面,C++运行时引入一个新的ABI,默认启用并且使用兼容C++11的std::string和std::list类代替现有的类。这个改动不影响已有代码,开发者无须为此重构它们,使用第三方库的开发者如果想要使用老版本ABI,则需要使用-D_GLIBCXX_USE_CXX11_ABI=0这个flag。新的libstdc++库提供了双重ABI,这意味着使用老版本GCC构建的代码能够在最新的libstdc++库中运行。库和插件的提供者可以选择支持同样的双重ABI概念,以此免去开发者们的重构之忧。
  • 更好地支持C++11和C++14:libstdc++现在完全支持C++11并为C++14提供实验性支持。此外,G++支持许多C++14的特性,例如:变量模板、非静态数据成员初始化集合,确定大小的内存销毁函数等。
  • GCC 5提供一个可选的,Go 1.4.2的完整实现。
  • GCC 5能够将自身构建为共享库libgccjit,然后作为即时编译器嵌入到机器码中。这一选择仍是实验性的并且“尚不推荐应用于实际产品中”,但是它的确给我们带来诸多有趣的可能性,例如在Python中自定义一门语言,然后为它构建一个机器码编译器。通过查阅官方GCC 5.1发行版无法判断应用于GCC运行时库的许可例外是否同样可以应用于libgccjit。如果你的最终产品和分发的程序链接了GCC运行时库,没有运行时库例外意味着你的产品和程序必须在GCC的许可(GPL3)下发布。
  • 最后,GCC 5.1增加了许多优化,例如:相同函数统一使用一个新的相同代码折叠(ICF)路径;检测只赋值却未使用的变量并优化;改进了内存使用以及链接时间;改进了注册配置等。你可以获取更完整的改动概况以了解更多细节。

GCC主要的竞争者是LLVM,现在发布到3.6版本。Phoronix运行了一系列的基准测试来比较GCC 5预发布版与LLVM 3.5,他们发现二者在绝大多数测试中的表现非常相似,只在几个测试中不太一样,例如:C-Ray多线程ray-tracer测试中,GCC的性能领先;LLVM的Clang在编译时胜于GCC。这么看来,两款编译器间最大的差异大概就是不同的许可模式了,GCC基于GPL3的许可,而LLVM基于一种更像是MIT/BSD的许可。

查看英文原文:GCC 5.1 is Out

感谢夏雪对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

你可能感兴趣的:(GCC 5.1正式发布)