LLVM是怎么工作的?为什么使用 LLVM 可以开发编译器?
LLVM是怎么开发编译器的?有没有形象的比喻,可以描述其原理?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
LLVM是怎么开发编译器的?有没有形象的比喻,可以描述其原理?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
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/