LLVM 将包含 Fortran 编译器

美国能源部宣布与
Nvidia 合作,为LLVM编译器集加入一个针
对大规模并行GPU计算的Fortran编译器,开源代码预计将在明年下半年发布。Fortran不再是主流语言,但在科学计算领域仍然被广泛使用,有大
量的旧代码依赖于Fortran。很多代码都是由能源部下属的国家实验室的工作人员维护的。他们将与Nvidia合作移植现有的Fortran编译器代
码,整合现在的编译器工具,填补LLVM在Fortran上的空白。                  

在XCode中,我们经常会看到这些编译选项,有些人可能会有些茫然,本文将对GCC4.2、LLVM
GCC 4.2、LLVM compliler 2.0三个编译选项进行一个详细的介绍。

via Solidot

澳门新葡亰 1

GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC
很快地扩展,变得可处理 C++。之后也变得可处理
Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。

LLVM 是 Low Level Virtual Machine
的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种语言编译器的后台来使用。如果这样还比较抽象的话,介绍下
Clang 就知道了:Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD
许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标就是超越 GCC。

澳门新葡亰,LLVM属于编译器的中间层,它的输入是编译器的IF代码,输出经过最佳化的IF代码。然后再被编译器转化为机器相关的汇编代码。

LLVM支持语言无关的指令集和类型系统。指令采用静态单赋值形式。

LLVM是为了任意一种编程语言写成的程式,利用虚拟技术,创造出编译时期,链结时期,执行时期以及“闲置时期”的最佳化。它最早是以
C/C++为实作对象,目前它支援了包括Objective-C, Fortran, Ada, Haskell,
Java bytecode, Python, Ruby, ActionScript, GLSL以及其他语言。

Apple(包括中后期的NeXT)
一直使用GCC作为官方的编译器。GCC作为开源世界的编译器标准一直做得不错,但Apple对编译工具会提出更高的要求。

一方面,是Apple对Objective-C语言新增很多特性,但GCC开发者并不买Apple的帐——不给实现,因此索性后来两者分成两条分支分别开发,这也造成Apple的编译器版本远落后于GCC的官方版本。另一方面,GCC的代码耦合度太高,不好独立,而且越是后期的版本,代码质量越差,但Apple想做的很多功能(比如更好的IDE支持)需要模块化的方式来调用GCC,但GCC一直不给做。甚至最近,《GCC运行环境豁免条款
》从根本上限制了LLVM-GCC的开发。
所以,这种不和让Apple一直在寻找一个高效的、模块化的、协议更放松的开源替代品,于是Apple请来了编译器高材生Chris
Lattner(2000年,本科毕业的Chris
Lattner像中国多数大学生一样,按部就班地考了GRE,最终前往UIUC(伊利诺伊大学厄巴纳香槟分校),开始了艰苦读计算机硕士和博士的生涯。在这阶段,他不仅周游美国各大景点,更是努力学习科学文化知识,翻烂了“龙书”(《Compilers:
Principles, Techniques, and
Tools》),成了GPA牛人【注:最终学分积4.0满分】,以及不断地研究探索关于编译器的未知领域,发表了一篇又一篇的论文,是中国传统观念里的“三好学生”。他的硕士毕业论文提出了一套完整的在编译时、链接时、运行时甚至是在闲置时优化程序的编译思想,直接奠定了LLVM的基础。LLVM在他念博士时更加成熟,使用GCC作为前端来对用户程序进行语义分析产生IF(Intermidiate
Format),然后LLVM使用分析结果完成代码优化和生成。这项研究让他在2005年毕业时,成为小有名气的编译器专家,他也因此早早地被Apple相中,成为其编译器项目的骨干)。

刚进入Apple,Chris
Lattner就大展身手:首先在OpenGL小组做代码优化,把LLVM运行时的编译架在OpenGL栈上,这样OpenGL栈能够产出更高效率的图形代码。如果显卡足够高级,这些代码会直接扔入GPU执行。但对于一些不支持全部OpenGL特性的显卡(比如当时的Intel
GMA卡),LLVM则能够把这些指令优化成高效的CPU指令,使程序依然能够正常运行。这个强大的OpenGL实现被用在了后来发布的Mac
OS X
10.5上。同时,LLVM的链接优化被直接加入到Apple的代码链接器上,而LLVM-GCC也被同步到使用GCC4代码。

网站地图xml地图