编译原理之美
宫文学
北京物演科技CEO
立即订阅
8171 人已学习
课程目录
已完结 43 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么你要学习编译原理?
免费
实现一门脚本语言 · 原理篇 (13讲)
01 | 理解代码:编译器的前端技术
02 | 正则文法和有限自动机:纯手工打造词法分析器
03 | 语法分析(一):纯手工打造公式计算器
04 | 语法分析(二):解决二元表达式中的难点
05 | 语法分析(三):实现一门简单的脚本语言
06 | 编译器前端工具(一):用Antlr生成词法、语法分析器
07 | 编译器前端工具(二):用Antlr重构脚本语言
08 | 作用域和生存期:实现块作用域和函数
09 | 面向对象:实现数据和方法的封装
10 | 闭包: 理解了原理,它就不反直觉了
11 | 语义分析(上):如何建立一个完善的类型系统?
12 | 语义分析(下):如何做上下文相关情况的处理?
13 | 继承和多态:面向对象运行期的动态特性
实现一门脚本语言 · 应用篇 (2讲)
14 | 前端技术应用(一):如何透明地支持数据库分库分表?
15 | 前端技术应用(二):如何设计一个报表工具?
实现一门脚本语言 · 算法篇 (3讲)
16 | NFA和DFA:如何自己实现一个正则表达式工具?
17 | First和Follow集合:用LL算法推演一个实例
18 | 移进和规约:用LR算法推演一个实例
实现一门脚本语言 · 热点答疑与用户故事 (2讲)
19 | 案例总结与热点问题答疑:对于左递归的语法,为什么我的推导不是左递归的?
用户故事 | 因为热爱,所以坚持
编译原理 · 期中考试周 (1讲)
期中考试 | 来赴一场100分的约定吧!
免费
实现一门编译型语言 · 原理篇 (12讲)
20 | 高效运行:编译器的后端技术
21 | 运行时机制:突破现象看本质,透过语法看运行时
22 | 生成汇编代码(一):汇编语言其实不难学
加餐 | 汇编代码编程与栈帧管理
23 | 生成汇编代码(二):把脚本编译成可执行文件
24 | 中间代码:兼容不同的语言和硬件
25 | 后端技术的重用:LLVM不仅仅让你高效
26 | 生成IR:实现静态编译的语言
27 | 代码优化:为什么你的代码比他的更高效?
28 | 数据流分析:你写的程序,它更懂
29 | 目标代码的生成和优化(一):如何适应各种硬件架构?
30 | 目标代码的生成和优化(二):如何适应各种硬件架构?
实现一门编译型语言 · 应用篇 (2讲)
31 | 内存计算:对海量数据做计算,到底可以有多快?
32 | 字节码生成:为什么Spring技术很强大?
实现一门编译型语言 · 扩展篇 (3讲)
33 | 垃圾收集:能否不停下整个世界?
34 | 运行时优化:即时编译的原理和作用
35 | 案例总结与热点问题答疑:后端部分真的比前端部分难吗?
面向未来的编程语言 (3讲)
36 | 当前技术的发展趋势以及其对编译技术的影响
37 | 云编程:云计算会如何改变编程模式?
38 | 元编程:一边写程序,一边写语言
结束语 (1讲)
结束语 | 用程序语言,推动这个世界的演化
编译原理之美
登录|注册

25 | 后端技术的重用:LLVM不仅仅让你高效

宫文学 2019-10-21
在编译器后端,做代码优化和为每个目标平台生成汇编代码,工作量是很大的。那么,有什么办法能降低这方面的工作量,提高我们的工作效率呢?答案就是利用现成的工具。
在前端部分,我就带你使用 Antlr 生成了词法分析器和语法分析器。那么在后端部分,我们也可以获得类似的帮助,比如利用 LLVM 和 GCC 这两个后端框架。
相比前端的编译器工具,如 Lex(Flex)、Yacc(Bison)和 Antlr 等,对于后端工具,了解的人比较少,资料也更稀缺,如果你是初学者,那么上手的确有一些难度。不过我们已经用 20~24 讲,铺垫了必要的基础知识,也尝试了手写汇编代码,这些知识足够你学习和掌握后端工具了。
本节课,我想先让你了解一些背景信息,所以会先概要地介绍一下 LLVM 和 GCC 这两个有代表性的框架的情况,这样,当我再更加详细地讲解 LLVM,带你实际使用一下它的时候,你接受起来就会更加容易了。

两个编译器后端框架:LLVM 和 GCC

LLVM 是一个开源的编译器基础设施项目,主要聚焦于编译器的后端功能(代码生成、代码优化、JIT……)。它最早是美国伊利诺伊大学的一个研究性项目,核心主持人员是 Chris Lattner(克里斯·拉特纳)。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《编译原理之美》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(6)

  • 阿鼎
    老师未提到visual studio的后端,请老师也介绍一下?

    作者回复: 你指的是微软的编译器后端技术?

    我没有太关注微软,有几个原因:

    1.微软的技术只能跑在windows上,而我希望能够用于多个平台,包括多个桌面操作系统和移动端等。

    2.从研究的目的,我希望看到源代码和开放的文档,这点微软肯定是不支持的。

    3.从使用的目的,我们希望后端工具能够帮助我们迅速实现自己的语言,而微软肯定没有动力帮这个忙。

    总体来说,我希望采用开源的工具,并且是授权友好的开源工具。互联网时代这么多的创新,都是建立在开源的基础上的。

    不过,技术都是相通的。微软这几年拥抱开源的态度也进步了很多。但至少目前为止,还没有办法用他们的东西。

    2019-10-21
    1
  • 拉欧
    老师的技术深度真心让人敬佩
    2019-12-05
  • 无嗔
    Mozilla 还真的是一家非营利性的科技公司
    2019-12-02
  • 疯二中
    老师你好,我在window上使用clang,看输出好像是用了visual studio的c++标准库。llvm没有提供window版本的c++标准库吗?
    2019-11-28
  • 在Windows上安装好llvm后,只能用clang命令,llvm-as和llc命令用不了,这是为什么呢?

    作者回复: 首先,找一下有没有llvm-as和llc这两个可执行文件。如果找不到,可能安装得不完整?

    其实,我建议拿下llvm的源代码来,自己编译一下。为什么呢?因为你自己编译的时候,缺省用的是debug模式,这样用一些命令的时候,会有一些debug模式下的特性可以用。比如,opt命令在debug模式下就能输出更多的信息,便于你做编译优化的实验。

    2019-11-05
  • 安排
    老师请问下,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-21
收起评论
6
返回
顶部