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

发布于 2022-08-30 16:00:55 字数 40 浏览 23 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想挽留 2022-09-06 16:00:55

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/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文