25 | 后端技术的重用:LLVM不仅仅让你高效
该思维导图由 AI 生成,仅供参考
两个编译器后端框架:LLVM 和 GCC
- 深入了解
- 翻译
- 解释
- 总结
LLVM是一个开源的编译器基础设施项目,主要聚焦于编译器的后端功能,支持多种语言的前端和多种后端CPU架构。LLVM的出名是由于苹果公司全面采用了这个框架,而在Android平台上最新的开发语言Kotlin也支持基于LLVM编译成本地代码。LLVM还支持了很多其他语言和工具,如Rust、Julia、OpenGL、TensorFlow等。相比之下,GCC也是一个有代表性的编译器后端框架,支持了GNU Linux上的很多语言。在本课程中,主要采用LLVM,但其中学到的一些知识在学习GCC或其他编译器后端时也是有用的。LLVM的特点包括良好的模块化设计和接口、同时支持JIT和AOT两种模式、有很多可以学习借鉴的项目、全过程优化的设计思想以及更友好的授权。这些特点使得LLVM不仅能让你更高效,还能提高工作效率。 文章介绍了如何安装LLVM,并使用LLVM自带的命令行工具体验其功能。通过示例展示了从C语言代码生成IR、优化IR、从文本格式的IR生成二进制的字节码以及将IR编译成汇编代码和可执行文件的过程。同时,还介绍了LLVM的IR有两种格式,文本格式和字节码格式,以及如何转换这两种格式。此外,还介绍了LLVM的灵活性,可以即时编译运行字节码,以及将字节码编译成目标平台的汇编代码的过程。最后,总结了使用LLVM的命令行工具,包括clang前端、llvm-as、llc等,并鼓励读者在熟悉了命令行工具之后进一步在编程环境中使用LLVM。 LLVM的特点包括良好的模块化设计和接口、同时支持JIT和AOT两种模式、有很多可以学习借鉴的项目、全过程优化的设计思想以及更友好的授权,这些特点使得LLVM不仅能让你更高效,还能提高工作效率。文章还介绍了LLVM的IR有两种格式,文本格式和字节码格式,以及如何转换这两种格式。此外,还介绍了LLVM的灵活性,可以即时编译运行字节码,以及将字节码编译成目标平台的汇编代码的过程。最后,总结了使用LLVM的命令行工具,包括clang前端、llvm-as、llc等,并鼓励读者在熟悉了命令行工具之后进一步在编程环境中使用LLVM。
《编译原理之美》,新⼈⾸单¥59
全部留言(14)
- 最新
- 精选
- 无嗔Mozilla 还真的是一家非营利性的科技公司
作者回复: 嗯。它实际上分为Mozilla基金会和Mozilla公司,基金会是公司的唯一股东。 成立一个公司的目的,是为了可以和谷歌这样的公司做生意,但赚来的钱是为了实现Mozilla基金会的使命。 挺有理想主义精神的一个组织。 中国未来是否也会孕育出着这样的组织呢?
2019-12-0216 - 阿鼎老师未提到visual studio的后端,请老师也介绍一下?
作者回复: 你指的是微软的编译器后端技术? 我没有太关注微软,有几个原因: 1.微软的技术只能跑在windows上,而我希望能够用于多个平台,包括多个桌面操作系统和移动端等。 2.从研究的目的,我希望看到源代码和开放的文档,这点微软肯定是不支持的。 3.从使用的目的,我们希望后端工具能够帮助我们迅速实现自己的语言,而微软肯定没有动力帮这个忙。 总体来说,我希望采用开源的工具,并且是授权友好的开源工具。互联网时代这么多的创新,都是建立在开源的基础上的。 不过,技术都是相通的。微软这几年拥抱开源的态度也进步了很多。但至少目前为止,还没有办法用他们的东西。
2019-10-2110 - 拉欧老师的技术深度真心让人敬佩
作者回复: 谢谢肯定! 只要喜欢技术,就会不断挖掘不断精进的。你一定会青出于蓝!
2019-12-058 - 安排老师请问下,LLVM 版本的 C++ 标准类库,这个是什么意思啊? 是说libc++是用llvm后端编译出来的吗?区别于gun项目的libstdc++吗? libc++这个c++标准类库是苹果弄出来的吗?
作者回复: C++标准类库是C++语言的标准中规定的。 标准类库的实现可以有多个,比如gnu、apache等的版本。 http://libcxx.llvm.org 这个页面写了LLVM项目为什么要另外实现一个。这里面有对实现方法的不同理解、有License的原因,有符合标准的原因。 至于libc++的贡献者,可能有苹果的人,因为苹果肯定是关心License的,这也是macOS选择基于FreeBSD定制,而不会基于Linux或其他有版权问题的Unix定制的原因吧!
2019-10-213 - 风在Windows上安装好llvm后,只能用clang命令,llvm-as和llc命令用不了,这是为什么呢?
作者回复: 首先,找一下有没有llvm-as和llc这两个可执行文件。如果找不到,可能安装得不完整? 其实,我建议拿下llvm的源代码来,自己编译一下。为什么呢?因为你自己编译的时候,缺省用的是debug模式,这样用一些命令的时候,会有一些debug模式下的特性可以用。比如,opt命令在debug模式下就能输出更多的信息,便于你做编译优化的实验。
2019-11-0522 - 疯二中老师你好,我在window上使用clang,看输出好像是用了visual studio的c++标准库。llvm没有提供window版本的c++标准库吗?
作者回复: libc++是llvm提供的一个标准库,在MacOs和Linux上基本上成为了事实标准,替代了原来GNU的libstdc++。 可惜,目前对windows平台还没有正式支持,只有试验性的支持,你可以参见: https://libcxx.llvm.org/docs/BuildingLibcxx.html#experimental-support-for-windows
2019-11-28 - Ivan.Qi增加一些LLVM的中文资料 LLVM后端开发书籍或文章整理 https://zhuanlan.zhihu.com/p/645857966 毕昇编译--llvm编译入门 https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz=MzkyNTMwMjI2Mw==&scene=2&album_id=2974971429714837504&count=3#wechat_redirect2023-09-02归属地:广东1
- 涛请问示例代码在哪里下载?2024-02-07归属地:北京
- allen老师,你提供的示例代码,我在运行的时候,报以下错误,能回答一下吗: Could not find a package configuration file provided by "LLVM" with any of the following names: LLVMConfig.cmake llvm-config.cmake2023-04-26归属地:上海
- Geek_a0b00e老师,您好,能详细讲讲llvm中的memory SSA吗2022-06-24