LLVM是一套编译器策略和框架,它实现了很多的库,包括编译器的库,在这些库上,可以很容易的实现编译不同的语言的程序,只要这些语言是基于C/C++的解释器,因为LLVM最主要的组件就是它的LLVM-GCC,它可以把C,C++编译成LLVM自己定义的虚拟机语言,就像Java虚拟机中的字节码一样的语言,同时LLVM又提供一组虚拟指令集合,类似于RISC指令,用于优化代码和为某一宿主平台(x86、ARM、…)生成原生代码,独立于具体的语言,又足够轻量。
而大家最关注的还是LLVM的性能,从图中可以看出llvm-gcc的性能比gcc要高出50%左右

而现在有很多项目都基于LLVM开发专用语言的高性能解释器,如Google工程师就启动了一个叫做 Unladen Swallow 的项目,寻求提升 Python 编程语言的性能,项目的目标之一是用基于 LLVM 的 JIT 环境取代 Python 的虚拟机,最终将 Python 的性能提升5倍。该项目是 CPython 运行时的一个分支,并将同 Python 的主干兼容。Unladen Swallow 项目的的目标是使用 LLVM (Low Level Virtual Machine)编译架构建立一个即时编译引擎,取代 Python 自己的虚拟机。这一方法优势明显,就像开发者们在项目计划中描述的那样,该项目使 Python 到 register-based 的虚拟机成为可能,并为将来的优化工作铲平道路。 采用 LLVM 还为更多在 Python 代码中集成其它语言敞开了大门,因为 LLVM 中间层是对语言无关的。 Unladen Swallow 项目还将带来运行时的其它改进,并更好地应用现代硬件的优势。多核处理器的并行处理引起很多开发者的关注,比如他们正考虑实现一个并行的回收器。他们还将改善 Python 的多线程功能以解决 Global Interpreter Lock 死锁问题。 虽然该项目刚刚启动,一个实验性的原型已经建立,源代码可以从 Google Code 站点的版本控制系统下载。当前的一些设计据说已经可以在某些场合提升性能。 他们的第二个里程碑,预计在2009年第二季度展开,这个阶段将有望实现等效的 LLVM 对 Python 虚拟机的替换。 Unladen Swallow 的开发者们希望最终可以在一些对性能要求严格的应用中,用 Python 语言取代 C 语言。他们在 Python 2.6 的基础上展开工作,这样可以兼容目前大量的已有 Python 项目,他们还会对 Python 3 提供平滑过度。 Python 在企业环境应用广泛,也是 Google 内部架构以及 App Engine 的主要技术。Google 对 Python 的投资将使这门语言在快速 Web 程序开发中更具魅力。
另外Apple的OpenGL JIT也是LLVM应用的经典案例。
国产的龙芯计算机上研究人员也在使用LLVM来做Linux上的内核编译器和嵌入式程序的编译器。
Llvmruby(llvmruby的GitHub代码库)是由Tom Bagby开发的项目。它提供Ruby对LLVM的绑定。Llvmruby可以让你不接触任何C++就能够试用LLVM,还允许你通过irb增量进行尝试。这是一项很有用的特性,比如Rubinius(此项目正计划使用LLVM)的贡献者就利用其构建原型系统,以原型化自己的某些主张。Rubinius团队正忙于使用C++重写虚拟机和清理一些内部问题。这个目前已经在Rubinius在Git的代码库的CPP分支中出现,而且还将LLVM作为外部的程序库。C++分支很快就会转入主干。根据最近在Twitter上发布的消息显示,Rubinius已经在全新的C++虚拟机上重新获得了运行大量Ruby代码的能力。
另外MacRuby 0.5将引入基于LLVM的VM,性能也明显提升。
在这语言横行的编程世界,LLVM就像是救星一样,它把所有的语言都脱离出自己的编译环境,集成到统一的底阶虚拟机环境中,使所有的语言之间的相互沟通和转换变得非常容易,就像是用LLVM将C/C++的Quake游戏编译成Flash的swf,同样将来也能将它编译成python,ruby或其他任何能够用LLVM编译的语言。


没有评论:
发表评论