编译原理实战课 / 带你吃透编译技术核心概念与算法
宫文学
北京物演科技CEO
  • 课程目录
  • 课程介绍
  • 开篇词 | 在真实世界的编译器中游历

    我会带你“行万里路”,去解析Java、Python、JavaScript等的编译器,把抽象的编译理论变得生动和具体。

  • 学习指南 | 如何学习这门编译原理实战课?

    我想和你聊聊这门课程的一些设计思路和特设板块,帮你找到最适合自己的学习方式,让你的学习能够事半功倍。

  • 01 | 编译的全过程都悄悄做了哪些事情?

    编译器翻译源代码,需要经过6步处理步骤,包括词法分析、语法分析、语义分析、生成中间代码、代码优化、生成目标代码。

  • 02 | 词法分析:用两种方式构造有限自动机

    基于正则表达式构造NFA,再去进行模式匹配,这是一个很好的算法思路,值得你去做举一反三的思考。

  • 03 | 语法分析:两个基本功和两种算法思路

    掌握了上下文无关文法和递归下降算法这两个基本功,以及掌握了自顶向下和自底向上的算法思路,那你对语法分析就不是外行了。

  • 04 | 语义分析:让程序符合语义规则

    语义,就是程序要表达的意思。具体来说,语义分析要做的主要工作就是与上下文有关的分析、与类型有关的处理,你需要重点关注。

  • 05 | 运行时机制:程序如何运行,你有发言权

    了解了代码是如何被运行的,以及是在什么样的环境中运行的,你才会知道如何让编译器生成正确的代码。

  • 06 | 中间代码:不是只有一副面孔

    编译技术的IR非常重要,它是运行各种优化算法、代码生成算法的基础。

  • 07 | 代码优化:跟编译器做朋友,让你的代码飞起来

    编译器会无所不用其极地做优化,而优化工作在编译器的运行时间中,也占据了很大的比例。

  • 08 | 代码生成:如何实现机器相关的优化?

    后端不只是简单地生成目标代码,它还要完成与机器相关的一些优化工作,来确保生成的目标代码的性能最高。

  • 知识地图 | 一起来复习编译技术核心概念与算法

    一起来复习吧!我整理了一张知识大地图,你可以根据这张地图中标记的七大编译阶段,随时速查常用的编译原理概念和关键算法。

  • 09 | Java编译器(一):手写的编译器有什么优势?

    我会带你去考察实际编译器的具体实现机制,探险的第一站是你很熟悉的Java语言,我们一起来看看它的编译器里都有什么奥秘。

  • 10 | Java编译器(二):语法分析之后,还要做些什么?

    我带你把Java编译器的总体编译过程了解一遍,在此过程中你能真正理解语义分析中的引用消解、符号表的建立和注解的处理工作。

  • 11 | Java编译器(三):属性分析和数据流分析

    我们来研究Java编译过程中的属性分析和数据流分析阶段。如果你在设计一门语言时,遇到了做语义检查的问题,就会更容易解决。

  • 12 | Java编译器(四):去除语法糖和生成字节码

    今天我们一起来探讨一下编译过程最后的两个步骤:去除语法糖和生成字节码。

  • 13 | Java JIT编译器(一):动手修改Graal编译器

    我会带你进入Graal编译器的代码内部,一起去修改、运行、调试它,让你获得第一手实践经验,消除你对JIT编译器的神秘感。

  • 14 | Java JIT编译器(二):Sea of Nodes为何如此强大?

    Graal的IR是一种图结构,它整合了控制流图与数据流图,符合SSA格式,有利于优化算法的编写和维护。

  • 15 | Java JIT编译器(三):探究内联和逃逸分析的算法原理

    内联和逃逸分析这两个重要的优化算法会大大提升程序的执行效率。熟悉这些重要的优化算法的原理,有助于你写出性能更高的程序。

  • 16 | Java JIT编译器(四):Graal的后端是如何工作的?

    带你认识Graal的后端,把LIR从抽象的概念中落地、把指令选择算法落地,让你的后端知识有第一个真实世界中编译器的参考系

  • 17 | Python编译器(一):如何用工具生成编译器?

    今天我们重点来研究一下Python的词法分析和语法分析功能,一起来看看它在这两个处理阶段都有什么特点。

  • 18 | Python编译器(二):从AST到字节码

    我们继续来研究Python的编译器,一起来看看它是如何做语义分析的,以及是如何生成字节码的。

  • 19 | Python编译器(三):运行时机制

    今天我们来讨论Python的运行时机制,你会了解到Python字节码是如何运行的,它的类型体系是如何设计的,等等问题。

  • 20 | JavaScript编译器(一):V8的解析和编译过程

    我们来透彻了解一下V8的编译过程,以及每个编译阶段的工作原理,这对你以后编写更容易优化的程序会非常有好处。

  • 21 | JavaScript编译器(二):V8的解释器和优化编译器

    我们重点围绕运行速度这个主题,来了解一下V8在TurboFan和Ignition上所采用的优化技术。

  • 22 | Julia编译器(一):如何让动态语言性能很高?

    Julia创造性地利用了LLVM的即时编译功能,这使得它同时拥有了动态类型语言的灵活性和静态类型语言的高性能。

  • 23 | Julia编译器(二):如何利用LLVM的优化和后端功能?

    Julia的IR会被转化成LLVM IR,从而进一步利用LLVM的功能。LLVM为程序优化和生成目标代码提供了可靠的支持

  • 24 | Go语言编译器:把它当作教科书吧

    Go语言的编译器完全用Go语言本身来实现,它完全实现了从前端到后端的所有工作,你研究它所采用的编译技术会更方便。

  • 25 | MySQL编译器(一):解析一条SQL语句的执行过程

    解析MySQL编译并执行SQL语句的过程,能加深你对数据库领域的编译技术的理解,也能加深对所有使用数据操作类DSL的理解

  • 26 | MySQL编译器(二):编译技术如何帮你提升数据库性能?

    数据库编译SQL语句的过程与高级语言有很大的相似性,它们都包含了词法分析、语法分析、语义分析和优化等处理。

  • 热点问题答疑 | 如何吃透7种真实的编译器?

    今天我会给你具体分析几个有代表性的问题,帮助你更好地掌握本课程的学习思路,真正吃透7种语言的编译器。

  • 划重点 | 7种编译器的核心概念与算法

    通过总结梳理的划重点内容,以及涵盖关键知识点的7张思维导图,你能够对7种语言编译器所使用过的编译技术有一个系统性的掌握。

  • 期中考试 | 这些编译原理知识,你都掌握了吗?

    到这里课程就已经更新一半了,我们来进行一场期中考试吧!

  • 用户故事 | 易昊:程序员不止有Bug和加班,还有诗和远方

    只要最终坚持下来,你和我,都可以掌握好编译这门“屠龙”技术。

  • 27 | 课前导读:学习现代语言设计的正确姿势

    接下来,我们从计算机语言设计的高度,来印证一下编译原理的核心知识点,以此提高把编译原理用于实战的能力。

  • 28 | 前端总结:语言设计也有人机工程学

    我们以解析过的7种编译器作为基础,来总结一下它们的前端技术的特征,为以后的前端工作做好清晰的指引。

  • 29 | 中端总结:不遗余力地进行代码优化

    今天我们来总结一下编译器中端部分的特征和编译技术,以此对如何设计IR、如何做优化有一个更加清晰的认识。

  • 30 | 后端总结:充分发挥硬件的能力

    我们来总结、梳理下各种编译器的后端技术,迭代提升原有的认知,并加深对指令选择、寄存器分配算法及编译器后端与语言设计的理解

  • 31 | 运行时(一):从0到语言级的虚拟化

    我们来探讨与运行时和标准库有关的话题,你能更加充分地理解设计一门语言要完成哪些工作,以及这些工作跟编译技术有什么关系。

  • 32 | 运行时(二):垃圾收集与语言的特性有关吗?

    采用什么样的垃圾收集算法,是实现一门语言时要着重考虑的点。

  • 33 | 并发中的编译技术(一):如何从语言层面支持线程?

    线程模式是现代计算机语言中支持并发的基础模式。在现代语言中,友好的并发处理能力是一项重要特性,需要编译技术进行相应的配合

  • 34 | 并发中的编译技术(二):如何从语言层面支持协程?

    协程能以非常低的代价、友好的编程方式支持大量的并发任务。Go、Python、Kotlin、C#等语言都提供了对协程的支持

  • 35 | 并发中的编译技术(三):Erlang语言厉害在哪里?

    Actor模型的特点,是避免在并发的程序之间共享任何信息,从而程序就不需要使用锁机制来保证数据的一致性。

  • 36 | 高级特性(一):揭秘元编程的实现机制

    元编程是计算机语言提供的一项重要能力。如果你要编写一些通用性很强、功能强大的库,元编程功能通常会给予你巨大的帮助。

  • 37 | 高级特性(二):揭秘泛型编程的实现机制

    对泛型的支持,是现代语言中的一个重要特性。它能有效地降低程序员编程的工作量,避免重复造轮子,写很多雷同的代码。

  • 38 | 综合实现(一):如何实现面向对象编程?

    面向对象的语言可以有多种不同的设计选择,体现在类型体系、重用机制和信息封装等多个方面。

  • 39 | 综合实现(二):如何实现函数式编程?

    今天我们从编译技术的角度,来探讨如何支持函数式编程,包括如何让函数作为一等公民、如何针对函数式编程的特点做优化等等。

  • 40 | 成果检验:方舟编译器的优势在哪里?

    我们一起来探讨下方舟编译器的定位、设计思路,以及方舟编译器中最重要的数据结构:Maple IR。

  • 期末答疑与总结 | 再次审视学习编译原理的作用

    在实现自己领域的语言,以及把自己的软件做得更具通用性这点上,编译原理能发挥巨大的作用,对你的职业生涯也会有切实的帮助。

  • 结束语 | 实战是唯一标准!

    实战是检验你是否掌握了编译原理的唯一标准,也是学习编译原理的真正目标。

  • 期末考试 | “编译原理实战课”100分试卷等你来挑战!

    一套习题,测试你对编原理知识的掌握程度。

  • 不定期加餐1 | 远程办公,需要你我具备什么样的素质?

    信息技术对工作和生活方式的重塑绝不会停止,远程办公一定会越来越成为现实,不管是对企业还是员工,我们要积极拥抱这样的未来。

  • 不定期加餐2 | 学习技术的过程,其实是训练心理素质的过程

    学习的过程,就是砥砺前行的过程,经常能自省和调整自己的状态,就能养成自己的学习能力。

  • 不定期加餐3 | 这几年,打动我的两本好书

    这两本书可以给你如何观察和理解这个世界开启一扇窗户,并能给你提供一条去打开文史哲的大门的独特的、有优势的途径。

  • 不定期加餐4 | 从身边的牛人身上,我学到的一些优秀品质

    在学习编译原理的过程中,你可能会遇到很多的困难和心理上的纠结。我希望通过我分享的故事,能够帮助你做好取舍,丢掉包袱。

  • 不定期加餐5 | 借助实例,探究C++编译器的内部机制

    探究C++的编译器是一项有点挑战的工作。这节课我更关注的是如何带你突破障碍,掌握探究Clang编译器的方法。

【限时福利 | 立省 ¥40】

拼团+口令「study2020」立省 ¥40 到手仅 ¥89,原价 ¥129

你将获得

  • 编译原理的核心基础知识
  • 7 大主流语言的编译器源码解读
  • 真实编译器的实现机制与关键算法
  • 从编程语言设计层面理解编译原理

讲师介绍

宫文学,《编译原理之美》课程作者,北京物演科技CEO。他是国内最早做BPM(流程管理平台)和BI平台(大数据平台)的创业者之一,之后也做过电子表单和快速开发平台,这些经历都与编译技术密不可分。他非常熟悉各种语言编译器的实现机制,专注于编译技术领域,并且正在设计一门新语言,在编译技术之路上具有丰富的实践经验。

课程介绍

编译原理实战课,我们到底要学些什么?

在这门课程里,宫老师精选出了Java、Java JIT、Python、JavaScript、Julia、Go、MySQL这7种真实编程语言的编译器,带你阅读它们的源代码,跟踪它们的执行过程,弄懂它们的运行机制。在这个过程中,你会获得对编译器的第一手理解,并能够与自己理解的编译原理知识相互印证。

另外,宫老师还会带你分析和总结这些现代语言的编译器的结构、所采用的算法和设计思路,帮你更好地理解和把握一门现代语言的特性,让你对新一代语言的设计思考有拨云见日的通透感。

有些语言我都没接触过,解析这些编译器,我能学得会吗?我学了又有什么用呢?

  1. 能学得会吗?

当然可以了。在课程中,宫老师会梳理出这些不同语言编译器的源代码的重点和核心逻辑,并且会结合易懂、易读、易动手操作的示例程序,来带你一步步理解它们是如何运行的。

另外,其实你并不需要担心语言不熟悉的问题,因为现代的高级语言,相似度是很高的,即使是你不熟悉的语言,你也照样可以写一些基本的、试验性的程序,研究它的实现机制。

而且,学习编译原理的人会练就一项基本功,那就是更容易掌握一门语言的本质。我们这门课就是要帮你成为钻到铁扇公主肚子里的孙悟空,研究某一种语言的编译器,当然有助于你通过“捷径”去深入地理解这门语言。

  1. 学了有什么用?

学好编译器前端技术,你能为软件增加各种自定义功能、能够实现自己的DSL,甚至实现完整的前端解析器(比如SQL解析器); 学好编译器后端技术,你能写出更容易优化的代码,洞悉让代码性能更高的秘密,以及采用后端工具快速实现一门完整的语言。

不仅如此,通过分析真实编译器的代码,你能洞悉实现一个完整编译器的各种细节。当你把编译技术用于一个项目时,你就会了然于胸,应该在什么地方使用什么样的技术。因为你已经见识过了各种编译器的实现方式,因此能够权衡和取舍。对你而言,编译原理,不再仅仅是原理,而是随时可以出击的利剑!

这个课程和之前宫老师的《编译原理之美》专栏课有什么区别?

《编译原理之美》专栏课是从前端与后端两个层面来讲解编译原理的核心技术点,用具体的案例带你理解抽象的原理。宫老师说,这门课是带你在编译原理的世界里“读万卷书”,目的就是帮你一次性掌握编译原理最核心的概念、理论和算法。通过这门课,你能真正克服学习编译原理的畏难情绪,可以真正运用编译技术解决报表设计等实际问题。

《编译原理实战课》是从实战的角度切入,是学习编译原理的“行万里路”,老师会用你最擅长的写代码、读代码的方式,来带你分析真实的编译器到底是怎么写出来的。通过研究多种编译器,你可以多次迭代对编译器的认知过程。并通过分析对比,你能发现这些编译器之间的异同点,激发出更多的思考,从而能得到更全面的、更深入的认知。在解析编译器的过程中,你也能更深入地把编译原理知识与实践相结合。

课程模块设计

课程主体分为三个模块。

预备知识篇:简明扼要地梳理编译过程中各个阶段的主要工作,带你重温编译原理的知识体系,让你对这些关键概念的理解变得更加清晰。在这个过程中,你也能更好地建立具体实现跟原理之间的关联,互相印证。

真实编译器解析篇:带你研究Java、Java JIT、Python等7种语言编译器的源代码,跟踪它们的运行过程,分析编译过程的每一步是如何实现的,并会对有特点的编译技术点加以分析和点评,以此帮你吃透现代语言的核心特性,直接提高你的技术水平,让你更高效地学习编译原理知识。

现代语言设计篇:带你分析和总结前面研究过的7种真实语言的编译器,进一步提升你对相关编译技术的认知高度,让你对如何设计编译器的前端、中端、后端、运行时,都有比较全面的了解,知道如何在不同的技术路线之间做取舍。

课程目录

特别放送

订阅须知