《深入理解LLVM》第一章 LLVM简介
2015-07-24 11:54
92 查看
第一章 LLVM简介
作者:史宁宁1.1 LLVM是什么
LLVM是什么?这是一个虽然基础,但是也曾经让很多新入门的人迷惑的一个问题。从字面上来讲,LLVM(Low Level Virtual Machine)是一个底层虚拟机,LLVM曾经有一部分功能对虚拟机有所帮助。但是现在,LLVM所代表的基本和虚拟机没有关系了,也不在作为一个缩写使用了,而是直接作为一个名字使用。那么LLVM到底是什么?LLVM可以被看作是一系列的编译器和工具链技术的集合,而且它们是模块化并且是可重用的。这是LLVM官方的解释。原话是:The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.【1】官方定义永远是准确的精炼的,那么作为刚刚接触LLVM的初学者,对LLVM的理解是什么呢?
LLVM是一个编译器;
LLVM是一个编译器框架;
LLVM是一系列的编译器工具;
LLVM是一个编译器工具链;
LLVM是一个C++实现的开源软件;
这几种对LLVM的理解都对,但是也都是LLVM的一个方面,综合起来就是一个完整的LLVM。所以,从狭义上来说,可以简单的把LLVM理解为一个编译器,但是也必须知道,这个编译器可不仅仅是个编译器,它包含了编译相关的各种工具链,并且有一些相对独立的工具,而且它还是开源的。关键一点不要再搞混了,LLVM是搞编译的,跟虚拟机已经完全没关系了。
每个人对同一个事务的理解都不会完全相同,即使是在技术领域也一样。所以,只要保证对事务理解不出现片面化错误化,使用自己的理解去思考一个事务,要比牢记住官方的定义要好的多,虽然后者往往更加的精确和简约。这是贯彻本书所建议的一个思考方式,只有这样,才能将知识和技术转化为自己的。
1.2 LLVM的发展
LLVM起源于2000年伊利诺伊大学厄巴纳-香槟分校维克拉姆•艾夫(Vikram Adve)与克里斯•拉特纳(Chris Lattner)的研究发展而成,他们想要为所有静态及动态语言创造出动态的编译技术【2】。LLVM从创立至今,已经走过了十几个年头。在这十几个年头里,它的发展是有目共睹的,它的成绩也是令人值得骄傲的。
2005年,苹果公司雇用了克里斯•拉特纳(Chris Lattner)及他的团队,为了苹果电脑开发应用程序系统,LLVM为现今Mac OS X及iOS开发工具的一部分【2】。同时,LLVM现在也是Google的Android系统中的一部分,特别是在Android系统选着使用了新的运行时ART(Android Runtime)之后,LLVM在Android系统中的比重就得到了更大的提升。
作为开源领域第二大的编译器,甚至在某些方面专门为了替代GCC而实现的LLVM来说,近些年它已经在不断的接近甚至准备超越GCC了。但从性能来说,根据2011年的测试,运行时期的性能,平均GCC比LLVM高出10%的性能;2013年的测试结果,LLVM可以编译出接近与GCC接近相同性能的运行码【2】。
———未完待续————–
声明:本博客内容均为原创,如若转发,请一定标明出处。禁止用于商业目的。
相关文章推荐
- VS2010 + Win7+ IIS7.5 开发调试ASP实战
- ASP.NET MVC3.0或4.0设置二级域名的方法
- 一个Try多个Catch需要注意的事项
- hdu5305Friends
- 基于ctk框架的插件的基本格式
- spring事务管理总结
- STRING INT INTEGER间的转换(ZZ)
- Spring3+MyBatis3整合log4j无法输出SQL语句问题的解决
- android照相简单案例
- 随机产⽣10个[20,40]数,并对10个数从⼩到da排序。
- 将字符串倒转
- 查找字符串中的空格数
- GRE写作必备句型
- JAVA四种基本排序方法实例总结
- 拉姆达表达式 追加 条件判断 Expression<Func<T, bool>>
- Typeface 字体改变
- linux 查看端口被占用情况详解
- Dexposed:Android平台免Root无侵入AOP框架
- Android JNI之OpenSSL
- 关于大型网站技术演进的思考(四)--存储的瓶颈(4)