LLVM

LLVM[编辑]

LLVM
Low Level Virtual Machine Logo
开发者 LLVM开发团队
初始版本 2003
稳定版本 3.5(2014年9月4日,4个月前)
编程语言 C++
操作系统 跨平台
类型 编译器
许可协议 伊利诺伊大学厄巴纳-香槟分校开源码许可(University of Illinois/NCSA Open Source License)
网站 llvm.org

LLVM,命名最早源自于底层虚拟机(Low Level Virtual Machine)的缩写[1]。它是一个编译器的基础建设,以C++写成。它是为了任意一种编程语言写成的程序,利用虚拟技术,创造出编译时期链结时期运行时期以及“闲置时期”的优化。它最早是以C/C++为实现对象,目前它支持了包括ActionScriptAda、D语言、FortranGLSLHaskellJava bytecode、Objective-CSwiftPythonRubyRustScala[2]以及C♯[3]

LLVM项目起源于2000年伊利诺伊大学厄巴纳-香槟分校维克拉姆·艾夫(Vikram Adve)与克里斯·拉特纳(Chris Lattner)的研究发展而成,他们想要为所有静态及动态语言创造出动态的编译技术。LLVM是以BSD授权来发展的开源码软件。在2005年,苹果电脑雇用了克里斯·拉特纳及他的团队,为了苹果电脑开发应用程序系统[4],LLVM为现今Mac OS XiOS开发工具的一部分。

LLVM的起名为Low Level Virtual Machine的首字字母缩写,由于这个项目的范围并不局限于创建一个虚拟机,所以这个缩写导致了广泛的疑惑。之后,LLVM开始成长,他成为众多编译工具及低级工具技术的统称,这使得这个名字变得更不贴切,所以这个项目放弃了这个缩写的意涵[5],现今LLVM已经单纯成为一个品牌,适用于LLVM底下的所有项目,包含LLVM中介码(LLVM IR)、LLVM除错工具、LLVM C++标准库...等。

因LLVM对产业的贡献,计算机协会于2012年授与Adve、Lattner及Evan ChengACM软件系统奖[6]

描述[编辑]

LLVM提供了完整编译系统的中间层,它会将中间语言(IF, Intermediate form)从编译器取出与优化,优化后的IF接着被转换及链结到目标平台的汇编语言。LLVM可以接受来自GCC工具链所编译的IF,包含它底下现存的编译器。

LLVM也可以在编译时期、链结时期,甚至是运行时期产生可重新定位的代码(Relocatable Code)。

LLVM支持与语言无关的指令集架构类型系统[7]。每个在静态单赋值形式(SSA)的指令集代表着,每个变量(被称为具有类型的暂存器)仅被赋值一次,这简化了变量间相依性的分析。LLVM允许代码被静态的编译,包含在传统的GCC系统底下,或是类似JAVA等后期编译才将IF编译成机器码所使用的实时编译(JIT)技术。它的类型系统包含基本类型(整数或是浮点数)及五个复合类型指针数组、矢量、结构及函数),在LLVM具体语言的类型建制可以以结合基本类型来表示,举例来说,C++所使用的class可以被表示为结构、函数及函数指针的数组所组成。

LLVM JIT编译器可以优化在运行时期时,程序所不需要的静态分支,这在一些部份求值(Partial Evaluation)的案例是相当有效,当程序有许多选项,在特定环境之下多数是可被判断为不需要的。这个特色被使用在Mac OS X Leopard(v10.5)底下OpenGL的管线,当硬件不支持某个功能时依然可以被成功地运作[8]。OpenGL stack底下的绘图程序被编译为IF,接着在机器上运行时被编译,当系统拥有高级GPU时,这段程序会进行极少的修改并将传递指令给GPU,当系统拥有低级的GPU时,LLVM将会编译更多的程序,使这段GPU无法运行的指令,在本地端的中央处理器运行。LLVM增进了使用Intel GMA芯片等低端机器的性能。一个类似的系统发展于Gallium3D LLVMpipe,被合并进GNOME,使其可运行在没有GPU的环境[9]

根据2011年的测试,运行时期的性能,平均GCC比LLVM高出10%的性能[10][11]。2013年的测试结果,LLVM可以编译出接近与GCC接近相同性能的运行码[12]

编译器[编辑]

LLVM最初被用来取代现有于GCC stack的代码产生器[13],许多GCC的前端已经可以与其运行,LLVM目前支持AdaC语言C++D语言FortranObjective-C的编译,它使用许多的编译器,有些来自4.0.1及4.2的GCC

LLVM引发一些人来为许多语言开发新的编译器,其中一个最引发注意的就是Clang,它是一个新的编译器,同时支持C、Objective-C以及C++。主要来自苹果电脑的支持,Clang的目的用以取代GCC系统底下的C/Objective-C编译器,在当代的系统,他较为容易与集成开发环境(IDE)集成,而且对于线程有更好的支持。GCC底下Objective-C的开发已经停滞,而苹果电脑已经将其支持移至其他的维护分支。

Utrecht Haskell编译器可以产生LLVM使用的代码,但它还在初期的开发阶段,并且在许多案例,展示他比起C代码产生器拥有更好的效率[14] Glasgow Haskell Compiler(GHC)拥有一个可以运作的LLVM后端,程序运行性能对比起原先的编译器可以达到30%的加速,它仅比一个由GHC所实现,并拥有多项优化技术的编译器还慢[15]

还有其他的组件在不同的开发阶段,包含(但不限于)Java bytecode[16]通用中间语言(CIL)、MacRuby(实现Ruby 1.9)、Standard ML及新的graph coloring暂存器配置.[来源请求]

另见[编辑]

参考文献[编辑]

  1. ^ http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-December/046443.html
  2. ^ Reedy, Geoff. Compiling Scala to LLVM. St. Louis, Missouri, United States. 2012-09-24 [2013-02-19].
  3. ^ Mono LLVM, [2013-03-10]
  4. ^ Adam Treat, mkspecs and patches for LLVM compile of Qt4
  5. ^ Chris Lattner discusses the name LLVM. [22 December 2011].
  6. ^ ACM Awards. ACM.
  7. ^ LLVM Language Reference Manual. [16 April 2012].
  8. ^ Chris Lattner. A cool use of LLVM at Apple: the OpenGL stack. LLVMdev mailing list. 15 August 2006 [26 October 2008].
  9. ^ Michael Larabel, "GNOME Shell Works Without GPU Driver Support"phoronix, 6 November 2011
  10. ^ V. Makarov. SPEC2000: Comparison of LLVM-2.9 and GCC4.6.1 on x86. [3 October 2011].
  11. ^ V. Makarov. SPEC2000: Comparison of LLVM-2.9 and GCC4.6.1 on x86_64. [3 October 2011].
  12. ^ Michael Larabel. LLVM/Clang 3.2 Compiler Competing With GCC. 27 December 2012 [31 March 2013].
  13. ^ Lattner, Chris; Vikram Adve. Architecture For a Next-Generation GCC, First Annual GCC Developers' Summit. May 2003 [6 September 2009].
  14. ^ Compiling Haskell To LLVM. [22 February 2009].
  15. ^ LLVM Project Blog: The Glasgow Haskell Compiler and LLVM. [13 August 2010].
  16. ^ Gaël Thomas, et al. VMKit: a substrate for virtual machines. LLVM.org. VMKit 目前的开发已经停滞,并且只支持和 LLVM 3.3 协同编译。对更高版本的 LLVM,需要对源码做一些修改。VMKit 在编译时需要 LLVM 源码中的lib, include。

外部链接[编辑]

转载于:https://my.oschina.net/hanjianqiao/blog/374729

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值