vlambda博客
学习文章列表

那些常用的编译器,到底是怎么写出来的?

众所周知,编译技术是计算机科学史上的明珠之一。 如果说整个互联网的发展是构建在编译技术和编程语言之上也毫不为过。

不过,有的人可能会觉得,我也不会去设计一门新的编程语言,有必要学习编译原理吗?学了有什么用呢?

实际上,编译原理不是用于炫耀的屠龙技,程序员在工作中经常会碰到需要编译技术的场景,比如: 编写界面模板引擎、 为项目编写各种各样的 DSL、 深度理解甚至开发出 Spring、Hibernate、阿里巴巴 Druid 这样的工具。

除此之外,解析用户输入,防止代码注入,为前端工程师提供像 React 那样的 DSL,像 TypeScript 那样把一门语言翻译成另一门语言,像 CMake 和 Maven 那样通过配置文件来灵活工作,运维工程师分析日志文件等等高级别的需求,都会用到编译技术。

编译技术,就是把高级语言的代码翻译成为计算机可以理解和运行的二进制代码的技术。

想在理解编译原理的概念、理论和算法的基础上,更加深入地把知识与实践相结合。要做到这一点,无外乎是解决这么几个问题:
 
1. 语法分析方法有自顶向下和自底向上两种,自己动手实现时,该选择哪一种?选择自己手写,还是工具生成?
2. 语义分析中要做属性计算,但具体到自己熟悉的语言,到底计算了哪些属性?如何完成引用消解和类型检查?
3. 编译器中会使用 IR ,实际使用中的 IR 到底是什么样子?
4. 编译器会优化我们写出的代码,但具体到各个语言,其背后的逻辑和优先级是怎样的?如何写出便于编译器优化的代码呢?
 
类似的问题还有很多,总结起来就是:我们用的编译器,到底是怎么写出来的。
 
现代语言的编译器,往往整合了最前沿的技术。掌握真实编译器的实现机制,有助于吃透语言的核心特性,更高效地运用它,进而提升我们的技术水平。

而且,阅读语言编译器的源代码,跟踪它的执行过程,也会让你获得对编译器的第一手理解,是高效学习编译原理的重要途径。
 
这里,我想推荐一个专栏《编译原理实战课》,帮你巩固编译原理的核心基础知识,深入解析 7 大主流语言的编译器源码,带你掌握真实编译器的实现机制与关键算法,进而站在更加宏观的视角,从编程语言的设计层面理解编译原理。
 
新人首单 ¥59.9 , 仅限「前 50 人」
原价 ¥129,相当于半价

这门课程的作者宫文学,在 IT 领域已经工作 20 余年,是国内最早做 BPM(流程管理平台)和 BI 平台(大数据平台)的创业者之一,而后做过电子表单和快速开发平台,这些经历都与编译技术密不可分。所以,宫大熟知各种语言编译器的实现机制,有着丰富的实战经验。
 
通过学习这门课,你可以深入了解现代语言编译器的结构、采用的算法及设计上的权衡。这样,你在用编译技术完成一个项目时,不仅懂得其运行原理,还知道该在什么地方用什么技术——掌握更多编译器的设计和实现思路,作为项目的决策依据。
 
宫大将带你深入解析 7 大主流语言的编译器,包括 Java 编译器(javac)、Java 的 JIT 编译器(Graal)、Python 编译器(CPython)、JavaScript 编译器(V8)、Go 语言的编译器(gc)以及 MySQL 的编译器。
 
之所以选择这些编译器,因为它们足够有代表性,都是我们平常会用到的。而且,它们各自采用了不同的编译技术,通过对比分析,你会发现其中的异同点,对编译技术有更全面的、深入的认知。
 
基于以上,宫大将课程划分为以下三大部分:
 
预备知识篇:系统梳理编译原理的核心知识体系,加深你对关键概念的理解。学完预备知识后,你再去看各种编译器的源代码和相关文档,可以更好地将实践与原理结合,并互相印证。
 
真实编译器解析篇:研究 7 种主流语言的编译器源码,跟踪它们的运行过程,分析编译过程的每一步是如何实现的,并对一些针对性的编译技术点加以分析和点评。这样,我们在研究了Java、Java JIT、Python、JavaScript、Julia、Go、MySQL 这 7 种编译器后,相当于把编译原理印证了 7 遍。
 
现代语言设计篇:分析总结前面讲过的编译器,进一步提升你对编译技术的认知高度。学完这一模块,对于如何设计编译器的前端、中端、后端、运行时,你都会有比较全面的了解,知道如何在不同的技术路线之间做取舍。
 
这门课程以研究真实编译器的运行原理为主要手段,着力于扩大你的知识版图,增强实战能力,从而达到「行万里路」的目的。

给大家申请了粉丝专属优惠

新人首单 ¥59.9 ,仅限「前 50 人」
原价 ¥129,相当于半价

温馨提示
订阅后可通过「极客时间 App」或「极客时间小程序」我的-已购,学习已订阅的专栏。

👇点击「阅读原文」,扫码免费试读。
新人首单 ¥59.9  ,相当于半价!
仅限前 50 人,手慢无!