《编译与反编译技术实战》——1.5 编译器LLVM

简介:

本节书摘来自华章计算机《编译与反编译技术实战》一书中的第1章,第1.5节,作者 刘晓楠 陶红伟 岳峰 戴超,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5 编译器LLVM

LLVM是构架编译器的框架系统,由C++编写而成,用于优化以任意程序语言编写的程序的编译时间、链接时间、运行时间以及空闲时间,对开发者保持开放,并兼容已有脚本。LLVM计划启动于2000年,最初由伊利诺伊大学香槟分校的Chris Lattner主持开展。2006年Chris Lattner加盟Apple公司并致力于LLVM在Apple开发体系中的应用。Apple公司也是LLVM计划的主要资助者。

LLVM的命名最早源自于Low Level Virtual Machine(底层虚拟机)的缩写,由于命名带来的混乱,目前LLVM就是该项目的全称。LLVM 核心库提供了与编译器相关的支持,可以作为多种语言编译器的后台来使用,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。LLVM的项目是一个模块化和可重复使用的编译器和工具技术的集合。LLVM提供一个现代化的、基于SSA的编译策略,能够同时支持静态和动态的任意编程语言的编译目标。至今为止,LLVM已被应用到许多商业和开源的项目,并被广泛用于学术研究。

LLVM荣获2012年ACM软件系统奖。

对关注编译技术的开发人员,LLVM提供了很多优点:

1)现代化的设计。LLVM的设计是高度模块化的,使得其代码更为清晰和便于排查问题所在。

2)语言无关的中间代码。一方面,这使得通过LLVM能够将不同的语言相互联结起来,也使得LLVM能够紧密地与IDE交互和集成。另一方面,发布中间代码而非目标代码能够在目标系统上更好地发挥其潜能而又不影响可调试性(比如,在目标系统上针对本机的硬件环境产生目标代码,但又能够直接通过中间代码来进行行级调试)。

3)可作为工具和函数库。使用LLVM提供的工具可以比较容易地实现新的编程语言的优化编译器或虚拟机,或为现有的编程语言引入一些更好的优化/调试特性。

相关文章
|
前端开发 IDE 编译器
LLVM编译器前端 Clang 简介
昨天晚上安装rails的开发环境,被ruby的编译搞的有点崩溃。下载的ruby的源码不能用系统自带的gcc -4.21编译,也不能用系统自带的clang进行编译,必须下载并使用gcc -4.2进行编译才能通过。今天稍微看看编译器的一些背景。
568 0
LLVM编译器前端 Clang 简介
《编译与反编译技术实战 》一1.5 编译器LLVM
LLVM是构架编译器的框架系统,由C++编写而成,用于优化以任意程序语言编写的程序的编译时间、链接时间、运行时间以及空闲时间,对开发者保持开放,并兼容已有脚本。LLVM计划启动于2000年,最初由伊利诺伊大学香槟分校的Chris Lattner主持开展。
1573 0
|
前端开发 C语言
《编译与反编译技术实战 》一1.4 编译器GCC
GCC原本作为GNU操作系统的官方编译器,现已被大多数类UNIX操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。
1351 0
《编译与反编译技术》—第1章1.2节编译过程
本节书摘来自华章出版社《编译与反编译技术》一书中的第1章,第X节,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.2 编译过程 考虑一种场景,让一个既懂英文又懂中文的俄罗斯人将一篇英文文章翻译成中文,此人可能要经历这样几个阶段:识别英文单词、识别英文句子、理解意思、先译成俄语并进行合理修饰、译成中文。
833 0
|
前端开发 程序员
《编译与反编译技术实战 》一2.2 编译器的结构
目前常用的程序设计语言都已经有很多优秀的编译器,比如C语言有GCC和ICC、C++有G++和I++、Java有JAVAC和GCJ。然而,即使这些常用的程序设计语言,其本身也一直在改变,即不断地完善。因而,实现这些程序设计语言的编译器也需要做出相应的改动。
1300 0