zoukankan      html  css  js  c++  java
  • 《深入理解LLVM》第一章 LLVM简介

    第一章 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】。

    ———未完待续————–
    声明:本博客内容均为原创,如若转发,请一定标明出处。禁止用于商业目的。

  • 相关阅读:
    BZOJ2784: [JLOI2012]时间流逝
    JZOJ 5190. 景中人 (找性质+dp+记忆化实现)
    [NOI2013] 向量内积(随机好题)
    【NOI2014】购票(斜率优化dp+树链剖分)
    「NOI2016」国王饮水记(猜结论+动态规划+斜率优化)
    「NOI2016」网格(猜结论+tarjan找桥点+乱搞)
    Codeforces 1270 H. Number of Components(找性质+线段树)
    Codeforces 1276D. Tree Elimination(树形dp)
    Codeforces 1158 F. Density of subarrays(找性质+分段dp)
    Codeforces 960G Bandit Blues (快速求第一类斯特林数)
  • 原文地址:https://www.cnblogs.com/ainima/p/6331904.html
Copyright © 2011-2022 走看看