来自: 网络世界
若大幅翻修GCC 程序设计工具的计划顺利进行,可望全面提升开放源代码软件的性能。
GCC 是一种“编译器”(compiler),几乎所有的开放源代码软件都以GCC 为基础。
即将推出的GCC 4.0 版包含全新的基础,让转译过程更精密,CodeSourcery公司GCC 4 发布经理兼“源代码长”Mark Mitchell 说。“4.0 版的首要目标,就是打造一个最佳化的基础架构,让编译器产生品质大幅提升的源代码,”Mitchell说。
编译器在软件开发社区之外乏人闻问,但GCC 的意义重大,所以备受瞩目。举例来说,改良后的GCC 可提升开放源代码软件的整体性能,举凡Linux 、Firefox 乃至于OpenOffice.org和Apache,执行性能都会为之一振,连带增强与微软、IBM 及其他专有软件较劲的竞争力。
GCC 也是整个协作软件开发理念的基础。若说GCC 是自由与开放源代码程序设计运动的中流砥柱和发动机,重要性有如媒体自由之于民主政治,一点也不为过。
GCC 的全名是“GNU 编译器合集”(GNU Compiler Collection ),属于GNU 替代Unix(GNU's Not Unix)方案中的原始计划之一。Richard Stallman在1980年代成立GNU 以及姊妹机构自由软件基金会(Free Software Foundation),其宗旨在开创一种可自由扩散的Unix仿制版,不受专有软件授权的拘束。
第一版GCC 在1987年发布,GCC 3.0 版2001年问世。此编译器的开发工作大多由一家名叫 Cygnus Solutions 的公司资助。这家开放源代码商业先驱1999年被Linux 经销商Red Hat 公司收购。
但改良GCC 并非易事。Evans Data分析师Nicholas Petreley 说,从GCC 3.3 版升级到3.4 版,在性能上虽然有进步,但却造成回溯兼容性的问题:有些用3.3 版编译顺畅的软件,改用3.4 版就破功。
RedMonk 分析师Stephen O'Grady 也表示,更新版的GCC 不应牺牲支持众多处理器类型的能力。O'Grady 说:“若新版GCC 能达到艰钜的目标,也就是以最佳化加速性能的同时,仍无损跨平台兼容性及回溯兼容性,那么其影响力极其深远。”
4.0 版新增功能
GCC 4.0 新增一个基础,以便在这个基础上添加最佳化(optimizations)处理。最佳化过程可能采取几种形式,但大致而言,都提供让编译器一览程序全貌的方法。
例如,目前的GCC 版本可把某程序局部的一小部分最佳化。但一种新式的最佳化,称为“纯量取代与聚集”(scalar replacement and aggregates),让GCC 找寻范围涵盖更大量源代码的信息结构,然后GCC 再把那些物件(objects)拆开,以便把物件元件直接存在快速的芯片上缓存内存(on-chip memory),而不是存入缓慢的主内存(main memory)。
Mitchell说:“打造最佳化架构,是为了赋予编译器宏观的能力。”这种架构称为“树状SSA ”(Tree SSA);SSA 的全称是“静态单一指派”(static single assignment)。
不过,Mitchell说,这个最佳化架构只是起步而己,下一步会附带可插入此架构的编写最佳化(writing optimizations )。“现在,那个架构的用途还不多,以后的用途会扩充,”Mitchell说。
Red Hat 程序设计师兼GCC 主力程序设计师Richard Henderson 说,GCC 4.1 版推出时,可能加入一种称为“自动向量化”(autovectorization)的最佳化功能。这项功能的用途,是在软件中找寻某个区域,让单一指令适用于多重的信息元素,借此精简处理器的作业过程。对小至电玩游戏大至超级电脑运算的各种应用来说,这种功能堪称便利。
GCC 4.0 版也引进称为“Mudflap ”的安全功能,在检查缓冲区溢位(buffer overruns)弱点的编译程序中加入额外的功能,Mitchell 说。Mudflap 会造成程序的执行性能减慢,所以预料主要会用于测试版,正式产品会关闭此项功能。
另外也将推出的,是Fortran 95程序编译器的预览版。Fortran 是拥有数十年历史的程序设计语言,Fortran 95是其更新版,至今仍是撰写科学与技术应用程序颇受欢迎的语言。
Henderson 说,以C++ 程序语言写的软件,执行速度应该会更快,在某些情况下甚至“出奇的棒”。
GCC 是通用型编译器,支持的程序设计语言包括:C 、C++ 、Java、Fortran 、Pascal、Objective-C 以及Ada.GCC 可支持的处理器平台则包括:英特尔Pentium 这类x86 处理器、AMD的Opteron 、Sun 的Sparc 、惠普的PA-RISC 、IBM 的Power ,以及大型主机处理器如英特尔的Itanium 、MIPS、ARM 、日立的SuperH和摩托罗拉的68000 系列。
“GCC 的优点向来是可携性(portability)与跨平台支持(cross-platform support),而不是速度,”O'Grady 说。
Mitchell说,目前GCC 配有大约十位10主力程序设计师。Linux 与其他高知名度开放源代码计划掀起的商业化与专业化浪潮,如今也让GCC 受到洗礼。
“就大多数源代码的撰写者而言,他们此刻多半是为了生计而写程序,和十年前的情况大异其趣,”Mitchell说:“现在,许多的程序开发工作非常耗时,而且需要长期耕耘,很难在学期之间短短两周的假期内一气呵成。”
员工约十二人的CodeSourcery公司靠销售GCC 相关服务赚钱,同时也卖GCC 周边的低端程序设计元件,例如“GNU C Library (glibc)”,是一套预先写好的软件元件合集。例如,其他公司可聘请CodeSourcery支持他们新推出的操作系统或处理器。
其他选项当然,GCC 不是程序设计师的唯一选择,甚至也不是唯一的开放源代码编译器。
新创公司Pathscale 就供应一款与GCC 3.3 兼容的开放源代码编译器。“本公司志在成为讲究高性能人士的首选GCC 替代选择,”Pathscale 营销副总裁Len Rosenthal 说。
Pathscale 的编译器是Silicon Graphics Open64 编译器的一种开放源代码版本,获美国多所国家实验室用于超级电脑运算任务。但Rosenthal 说,此编译器即使只搭配普通的应用程序,也能产生执行速度更快的软件。
Rosenthal 明白,Pathscale 现在挑战的是GCC 本尊。但他强调,Pathscale 怀有远大的抱负。“我们的目标是成为x86 平台的缺省编译器,”他说。
还有另一个根基更稳的GCC 竞争者——英特尔公司。英特尔的编译器被公认为x86 平台应用软件的标准编译器。英特尔营销部门兼商业软件与产品部门经理James Reinders自豪地指出,连使用广泛的MySQL 开放源代码数据库也采用英特尔的编译器。
可是,有趣的是,协助改良GCC 的,也是同一群英特尔编译器的工程师。Reinders说,那是因为GCC 是促使应用软件向英特尔处理器平台靠拢的关键开发工具。例如,英特尔协助修改GCC ,以便让GCC 产生支持Itanium 处理器的软件。
Reinders说:“显然GCC 普遍获得采用,在软件开发社区扮演重要的角色。若小看它的重要性,不免太愚蠢。”