昨天,Richard Guenther宣布GCC发布最新的4.7版本。
同时GCC也迎来了它的25岁生日1。
Table of Contents
1 4.7的新特性
我们先来看看GCC 4.7的亮点:
1.1 通用编译优化的改进
- 链接时优化在可扩展性、稳定性和资源占用上都有改进
- 改进对函数内联的支持
- 改进对过程间常数传播的支持
- 增加对字符串长度相关的几个string库函数的编译优化
1.2 新语言及语言新特性的改进
- 对几种特定CPU的软件事务型内存支持
- 增强对ISO C++11标准的支持
- 原子操作支持
- C++11 存储模型支持
- 非静态数据成员构造函数支持
- 更多对ISO C11标准的特性支持
- C/C++/Fortran的 OpenMP 3.0 支持
- 增强对Go 1 语言标准的支持(目前支持尚不完善,4.7.1将提供完整的支持。)
2 25岁的GCC
GCC,即 GNU Compiler Collection,是GNU开发的一套针对多种编程语言,面向多种处理器指令集的编译器。
自1987年3月22日,Richard Stallman在MIT发布1.0版本至今,已经25年。
经过25年的发展,GCC目前已经是GNU/Linux系统的“亲妈”,所有GNU/Linux系统都是采用GCC编译、生成可执行的内核、可执行文件和库。
不仅仅GNU/Linux,在BSD系统、Mac OS X系统也是标准编译器(虽然这俩有向LLVM转移的趋势4 )
目前GCC支持C,C++、Objective-C、Fortran、Java、Ada、Go等语言,以及OpenMP、UPC等语言扩展。
支持Alpha、MIPS、ARM、SPARC、X86-64、IA-32、IA-64、PowerPC等指令级。
虽然已经走过了25年,GCC依然保持活跃的开发社区。最近又计划大刀阔斧搞改革,在GCC 5.0中吸取LLVM模块化的成功经验5。
我比較想知道 GCC 5.0 是不是真有借鑑 LLVM 模塊化的打算,還是只停留在討論的階段?
还处在讨论阶段,离正式开发应该还早,模块化是个伤筋动骨的事情。到时候会冒出许多bug,而且还要把性能调上去。
gcc开发者太霸气了,很难想象重整一个25年,近千万行,缺乏文档的编译器会是怎样一个项目,带头大哥的功力得有多深厚才行啊…有意思的是从头到尾没提过llvm,只拿gtk做榜样
模块化这件事情恐怕还需要出去弄个分支来搞很长时间,毕竟gcc的贡献公司多更看重用有限的投入获得一个支持自家产品的编译工具吧,对激进改动的抵触可能比较大;而LLVM是大财主苹果独霸的环境……Money talks,gcc世界里那些公司现在有这种强烈的需求还看不清楚。