用Go编写编译器
246 页
Chinese
PDF
4.5

用Go编写编译器

用Go编写编译器

作者:

年份:

简介:

引言

《Writing a Compiler in Go》是Thorsten Ball关于为Monkey语言创建解释器和编译器的著名两部曲中的第二部。如果第一本书(《Writing an Interpreter in Go》)教授如何构建解释器,那么这一卷则引导读者更进一步——创建生成字节码的完整编译器以及自己的虚拟机(VM)。

该书于2019年出版,共246页,面向掌握Go语言(Golang)的程序员。它非常适合那些希望通过实践深入理解编译器、字节码和虚拟机工作原理的人。

关于本书

Thorsten Ball循序渐进地展示了如何将第一本书中的解释器转变为编译器。核心思想是:我们不直接执行AST(抽象语法树),而是将其编译为字节码指令,然后在虚拟机上执行它们。

本书涵盖以下主题:

  • 设计字节码的指令系统(操作码)。
  • 实现将AST转换为字节码序列的编译器。
  • 创建基于栈的虚拟机(VM)。
  • 处理变量、函数、闭包、数组、哈希和内置函数。
  • 编译器的优化与调试。
  • 通过单元测试对每个阶段进行测试。

本书适合谁

本书面向中高级Go开发者,他们已经熟悉语言基础并希望深入系统编程。同时,对所有对编译器、虚拟机以及编程语言内部机制感兴趣的人也很有帮助。如果您读过第一本书,那么这本是必读的续作。如果没有,作者建议从第一本开始,但也可以直接阅读本书,尽管难度会更大。

读者将学到什么

  • AST到字节码的编译过程。您将学习设计指令系统并编写从解析树生成字节码的代码。
  • 基于栈的虚拟机的工作原理。您将实现一个执行字节码、管理栈、函数调用和内存的VM。
  • 如何处理闭包。最复杂的主题之一——从外部上下文捕获变量——得到了非常详细的阐述。
  • 如何测试编译器和VM。作者非常重视测试,使本书非常实用。
  • 如何调试字节码。您将学习输出跟踪信息并查找编译器中的错误。

优点

  • 实践导向。每一章都包含可以立即运行和修改的代码。您不仅仅是阅读理论,而是在编写一个真正的编译器。
  • 循序渐进。作者不会一次性用复杂概念压垮读者。每个新元素都逐步引入,并附有示例和测试。
  • 干净易懂的Go代码。代码风格接近生产环境,注重可读性和模块化。
  • 深入主题。您不仅会了解“如何做”,还会明白“为什么”——作者解释了各种权衡和替代方法。
  • 自包含性。本书包含从设计到最终实现所需的一切。最后,您将获得一个可运行的编译器和VM。

推荐给谁

本书对以下人群很有帮助:

  • Go开发者,希望拓宽视野并理解编程语言的内部工作原理。
  • 编译器课程的学生和教师,作为优秀的实践材料。
  • 其他语言的开发者(Python、Java、C++),如果熟悉Go的话——这些概念是通用的。

推荐