免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1945 | 回复: 0
打印 上一主题 下一主题

GCC开发计划及其分支介绍[第十期] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-06 13:10 |只看该作者 |倒序浏览
ChinaUnix网友:EricFisher
  这篇文章大部分是对GCC网站上的原文进行的摘抄和翻译。其中,开发计划部分,参见http://gcc.gnu.org/develop.html;开发分支部分,参见http://gcc.gnu.org/svn.html#devbranches。另外还有一些信息来自GCC summitGCC mailing lists
  GCC有一套完善的开发计划和方法。从而,整个庞大的社区可以借助SVNmailing listwiki等工具,进行有条不紊,快捷高效的合作,不断推出高质量的版本。
  在开发主干(trunk)上,开发过程需要经历三个阶段(stage):阶段一,可以对编译器做任何自然的修改,特别是从开发分支(branch)中合并进来的大的改动;阶段二,只允许有一些较小的改进;阶段三,主要是修复bug,另外如果一个新的port不需要改动编译器的其它部分,则也可以加进来。
  对于大的改动,则要先创建一个开发分支,在分支上进行开发,当满足一定要求的时候,才可以合并到开发主干上。这些要求包括:一些基本的标准要求,比如文档,任何用户可见的改动,包括命令行选项,都要在手册中有介绍;开发分支要至少在三个不同的目标机(target)上验证过,包括编译器的自举和回退测试(regression test)。
  在阶段三快要结束的时候,创建一个发行版本分支。发行版本分支主要用于修补相对之前版本有回退的地方,从而使得每个发行版本都优于之前的版本。随后,便是一些修补bug的版本。
  整个流程可以使用如下的时间表来展示:
+-- GCC 4.3 branch created ------+
| \
v v
GCC 4.4 Stage 1 (starts 2008-02-1 GCC 4.3.0 release (2008-03-05)
| \
| v
| GCC 4.3.1 release (2008-06-06)
| \
| v
v GCC 4.3.2 release (2008-08-27)
GCC 4.4 Stage 3 (starts 2008-09-01) \
| v
| GCC 4.3.3 release (2009-01-24)
|
|
+-- GCC 4.4 branch created ------+
| \
v v
GCC 4.5 Stage 1 (starts 2009-03-27) GCC 4.4.0 release (2009-04-21)
|
|
v
  现在,GCC 4.4.0已经发布,新合并进来的分支包括iragraphite等。GCC 4.5.0正处于第一个开发阶段,也有一些分支正在合并进来,包括ltoplugins等。这里列举了几个分支:
IRAIntegrated Register Allocator
  改进GCC的寄存器分配。使用集成的寄存器分配方法来替换以前分散在不同过程(pass)中的局部寄存器分配,全局寄存器分配等。寄存器分配问题在GCC中存在很久,一直没有得到很好的解决。现在这个分支已经合并到了GCC 4.4.0中。如果使用-fdump-rtl-all-all来转储(dumptree级的中间过程,则可以看到*.ira文件。VladimirGCC Summit 2007上有一篇文章《The integrated register allocator for GCC》,介绍了相关的工作。
GraphiteGimple Represented as Polyhedra
  基于多面体模型在高层次上对循环进行优化。已经合并到GCC 4.4.0中。该分支用于进行新的改进,从而合并到以后的版本中。参见http://gcc.gnu.org/wiki/Graphite。他们每周都有一次电话会议。SebastianGCC Summit 2006上有一篇文章《GRAPHITE: Polyhedral Analyses and Optimizations for GCC》,介绍了相关的工作。并且,今年的Google Summer of Code,也有一个相关的项目。
LTOLink Time Optimization
  链接时优化,现在应该是由Diego Novillo维护(我不确定)。简单的讲,就是编译器先语法分析源程序,将中间表示保存在输出的目标文件中,在链接的时候,再次调用编译器将所有目标文件的中间表示都读进来一起优化。详细的介绍参见http://gcc.gnu.org/wiki/LinkTimeOptimizationLTO的设计文档写的很精炼概括,值得借鉴。现在,这个分支正在向开发主干中合并。相信当lto合并进来之后,新版本的GCC在性能优化方面会有一个很好的提升。
Plugins
  使得GCC具有支持插件的功能,一些新的优化和其它功能模块可以作为插件的形式提供给GCC。在最新的Internals中,已经增加了plugins这一章节。参见http://gcc.gnu.org/wiki/plugins。该分支已经合并到了开发主干中,并且已经关闭。
Gcc-in-cxx
  在使用c++重写了binutils中的链接器(gold)之后,Ian Lance Taylor开始着手将GCC也改写成C++的形式。GCC Summit 2008中的《A New ELF Linker》介绍了相关的工作。gold的代码,写得非常漂亮。Gcc-in-cxx也应该非常值得期待。
Incremental-compiler
  该分支用来将GCC改写成增量编译器(incremental compiler)。增量编译器用来减少GCC的编译时间,使得编译时间大体上与源代码的改动大小成比例。该分支由Tom Tromey维护。在GCC Summit 2008上,有一篇《Incremental Compilation for GCC》介绍了相关的工作。
  GCCmailing list每天都有很多的邮件,如果是关于一些开发分支的话题,一般会在标题上标明。最近有一些关于LLVMGCC的话题相当激烈,包括GCCLLVM的性能比较(http://gcc.gnu.org/ml/gcc/2009-05/msg00302.html),以及将LLVM作为GCC的插件(http://gcc.gnu.org/ml/gcc/2009-06/msg00055.html)。社区中,有人认为在自由软件领域,有一些竞争是好事。这包括LLVM和其它编译器。就好比人们在开始一个新的项目时,也应该考虑一下使用什么语言更好。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP