技术开发 频道

《开源时代》访龙芯GCC邢明杰

  【IT168 专稿】大家好,新的一起专家专栏又和大家见面了,今天有幸邀请到来自中科院计算所的邢明杰工程师,让他来给我们介绍一些他们目前所从事的开源社区事务,他们目前主要负责龙芯GCC后端支持的工作。

  《开源时代》:能先给大家简单介绍一下GCC的发展情况么?以及GNU的发展情况,因为GNU到现在已经25年了。

  邢明杰:有关GNU的背景和资料,网上有很多,我也不必在这里重复了。感谢Richard Stallman为我们竖起的这面"自由"旗帜。我想,也许就是GNU的这种自由的精神,才吸引了无数的贡献者,推动着GNU一直走到今天。GCC是GNU计划中最早开发出来的软件之一。

  我们知道,GCC最初也是由Richard Stallman开发出来的。GCC的第一个版本于1987年发行,

  只支持C语言;现在GCC已经支持C,C++,Objective-C,Fortran,Java,Ada等语言。GCC的含义也由最初的GNU C Compiler演变为GNU Compiler Collection。具统计,现在GCC拥

  有的maintainer有近四百人,contributer数千人,tester数万人。规模可谓壮大。

  《开源时代》:我听说你之前创建过HelloGcc Workshop,这是一个什么样的社团,现在的状况如何?

  邢明杰:其实,只是在网上注册了一个空间。当时我正在尝试翻译GCC Internals,想通过这种方式来强迫自己读一遍Internals。于是便申请了一个网上空间把翻译放到上面。翻译的很粗略,而且直到现在还剩下了许多章节没有翻译,呵呵。不过,也因此在网上认识了许多朋友。teawater和我在2008年10月份举办了一个小型的关于GCC和GDB的技术讨论会,邀请大家在一起互相交流、沟通,感觉受益匪浅。我也希望今年可以继续举办第二次技术讨论会。这是一个比较随意的社团,主要是针对GCC工具链方面的,随时欢迎大家加入。

  《开源时代》:GCC(以及bintuils)现在已经加入了对龙芯2E/F的支持,你对此有何看法?

  邢明杰:首先,我想说明的是,对于这些工作,我并没有做出什么贡献。在binutils邮件列表上搜索loongson关键字,就可以看到,binutils社区中与龙芯相关的邮件最早是2007年2月份从gentoo.org发出的。我是2008年初才开始接触龙芯,当时注意到GCC还没有支持龙芯后端,大家还只是使用mips的后端来编译龙芯上的操作系统以及应用程序。而国内已经有一些朋友在网上发布了自己的patch。其中我所知道的比较活跃的两位朋友是Zhang Le和jamesr。我便也做了一个简单的移植,并在GCC邮件列表上发邮件询问是否有人正在做龙芯GCC的移植工作。紧接着Maxim(来自codesourcery)便回复我说他们已经着手要提交patch了。但是,从这件事情上,我意识到一个问题。那就是,我们需要融入到社区中,积极参与邮件列表的讨论,提交基于svn开发版本的patch,只有这样才能将自己的工作贡献到最终的GCC发行版中。如果只是在国内的论坛上发一些帖子,或者自己基于某个版本做一些修改,搞出一个仅供内部使用的版本来,最终还是无法被社区接受。其实,GCC有许多分支项目,感兴趣的朋友可以到官方网站上查看一下,上面也介绍了如何提出贡献。另外,GCC每年都会召开一次大会,会议论文也可以在网站上获得。我们上次就邀请了在2008年GCC Summit上发表过文章的yingbo来参加我们的讨论会。

  《开源时代》:你现在在计算所的GCC小组工作,能给大家介绍一下这个小组的情况么?

  邢明杰:现在,我们在吴老师的带领下,成立了一个小组,主要从事GCC方面的研究工作。一方面,为龙芯芯片的后续研发及时提供GCC编译器的支持;另一方面,与国际上的研究机构合作,开展一些前沿的科研项目。小组成立时间还不是很长,主要是由员工和在读博士,硕士组成。我们也希望有感兴趣的朋友加入进来。在这里,我也想感谢吴老师对我的指导,彭亮,衷璐洁,邱吉,徐翠萍,冯睿鑫,陈洋,黄元杰等给我的帮助。

  《开源时代》:既然作为GCC的团队,如何和国际上的开源技术人员协作的,有什么值得国内的技术人员学习的地方?

  邢明杰:我个人认为,非常直接有效的方法,就是通过邮件列表。单从讨论技术问题这样角度考虑,我非常喜欢Mailing List这样的邮件列表形式,不喜欢bbs这样的网站论坛形式。另外,我们现在跟法国INRIA合作,他们这些年在GCC社区非常活跃,我们可以通过邮件,电话会议,或者互访的形式进行交流。总之,我觉得交流是最重要的环节。

  《开源时代》:GCC在和商业编译器的对比中,有何不同?

  邢明杰:我想,如果和商业编译器相比的话,最大的不同就应该是,GCC是非商业的。你可以自由的获得它的源代码,对它进行修改并且发布。而且,现在GCC发展很快,性能也在不断提升,甚至可以和一些商业编译器相媲美。另外,GCC支持众多的体系结构,非常易于移植。我们知道,linux本身就是通过GCC来编译的。所以说,在linux下工作的朋友一定对它不陌生。

  《开源时代》:龙芯GCC移植有哪些特点,在龙芯平台上使用GCC需要注意哪些问题?

  邢明杰:我们知道,GCC具有很好的可移植性,而且龙芯又是基于MIPS体系结构来设计的,所以龙芯GCC的移植相对来说需要改动的地方要少许多。查看一下GCC中关于龙芯2E/F的代码,就可以看到,主要的工作包括对龙芯特有的多媒体指令的支持,指令流水线的描述以及一些其它新增指令的支持等。对于其它方面,比如说寄存器的使用,函数调用约定等,都是沿用现有的MIPS后端代码,这样也就使得在龙芯和MIPS具有一定的兼容性。在龙芯2E/F机器上,通常如果使用GCC缺省的选项来编译程序,就会生成针对MIPS1的体系结构的代码。当然,生成的程序也可以执行,但是性能会差一些。如果要生成针对龙芯2E/F的体系结构的代码,则可以加上-march=loongson2e或者-march=loongson2f这样的选项。

  《开源时代》电子杂志最新第六期2009年3月4日发布:

  ITPUB下载地址:http://www.itpub.net/thread-1109670-1-1.html

  Chinaunix下载地址: http://linux.chinaunix.net/bbs/thread-1032586-1-1.html

0
相关文章