LLVM是怎么工作的?为什么使用 LLVM 可以开发编译器?


LLVM是怎么开发编译器的?有没有形象的比喻,可以描述其原理?

llvm 编译器

无脑的食尸鬼 9 years, 6 months ago

LLVM 是一个编译器框架,一般的编译器像GCC,操作流程是这样的,先将源代码解析编译成汇编代码,然后用as编译成机器码。最后用链接器链接成可执行程序或者动态库。这里得说明的是GCC用的是AT&T的汇编语法。当然GCC编译的时候,一般直接搞定了 内你看不到,问题来了,汇编本质上是无法跨平台的,比如ARM,MIPS等等。
就拿clang来说吧,一般的流程是先把源代码解析,预处理,语法树,这个编译原理里面有的,更深入可以看 "龙书",LLVM作者就是喜欢这本书(LLVM的Logo才是龙的)。
网上也有文章讲: http://www.ibm.com/developerworks/cn/opensource/os-cn-clang/
可以自己看一下。
待续。。
clang ~/t.c -S -emit-llvm -o -
这个命令可以生成IR,
clang : http://clang.llvm.org/get_started.html
而LLVM IR就是类似与汇编文件,但是呢又是跨平台的,和Java Bytecode .NET MSIL类似,不过IR还可以编译成机器码,可以优化,LLVM有很多相应的工具,一般的语言只要实现自己的语法,并且把源代码搞成IR,跨平台的事情就搞定了,LLVM的IR实现了绝大部分的平台 http://llvm.org/svn/llvm-project/llvm/trunk/ 可以自己用svn co代码下来研究。
在CodePlex 代码托管网站上,有人使用LLVM实现了C#的Native。
流程把C# MSIL转成IR,而后iic编译IR成机器码,连接器链接。
http://csnative.codeplex.com/

冷面小瓜子 answered 10 years, 9 months ago

Your Answer