相传,编译原理界有三大圣书:

龙书是为Compilers: Principles, Techniques, and Tools

虎书是为Modern Compiler Implementation in C

鲸书是为Advanced Compiler Design and Implementation。

三大巨头名声在外,但要吃透其中奥妙绝非易事。

图灵君常常收到读者询问:有没有轻量级一些的编译原理入门教程实战性很强的那种?

现在终于可以给出答案了!在介绍这套书之前,先来看看读者给出的这样一条评论:

龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书_程序设计

“如果我被困在一座岛上,必须构建一门编程语言,那么这就是我要唯一带在身边的书。”

龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书_编译器_02

这套书的英文版具有很高的辨识度,并且在豆瓣上获得 9.5 和 9.4 的高分。

龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书_程序设计_03

作者Thorsten Ball告诉图灵君,一直以来,有很多来自中国的编译器爱好者问他什么时候出中文版。现在,他终于可以分享好消息啦!

作者简介

索斯藤·鲍尔(Thorsten Ball),Sourcegraph软件工程师,精通多门程序设计语言,包括Go、C、JavaScript和Ruby,深谙编译原理、系统编程、Unix、数据库等相关技术。现居德国,长期活跃于欧洲各大技术大会。

如何阅读这套书

彩猴书——用Go语言自制解释器

从零开始,不用任何第三方包,从无到有手写一门类C语言——Monkey 语言

你将为 Monkey 实现词法分析器、语法分析器、抽象语法树和宏系统。

你写的 Monkey 语言可以绑定值和名称:

let age = 1;

let name = "Monkey";

let result = 10 * (20 / 2);

也可以将数组绑定到一个名称上:

let myArray = [1, 2, 3, 4, 5];

还可以绑定函数和名称:

let add = fn(a, b) { return a + b; };

支持调用函数:

add(1, 2);

当然,在阅读过程中,你还将教会 Monkey 更多本领!

金猴书——用Go语言自制编译器

帮助 Monkey 进化,实现字节码编译器和虚拟机,使其性能提升到解释器时期的3倍。

必须先读彩猴书,再读金猴书吗?

两本书有一个进阶关系。虽然你完全可以按照自己的兴趣任意选择一本读,但最佳的阅读顺序仍然是先读彩猴书,再读金猴书

这套书适合谁

龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书_编程语言_04

为什么用Go语言?

Go语言很容易阅读和理解。即使对于初学者,这套书中的代码也浅显易懂。

此外,Go语言提供了出色的标准库和工具。仅用这些工具,不用任何第三方库,你就能写出解释器和编译器。

彩蛋:不止Go语言!

自从英文版出版以来,全世界的许多读者已经基于书中内容用其他语言实现了更多的 Monkey:Python、Java、Elixir、Rust、C、C++、TypeScript、C#、Dart、Haskell、V、PHP、Kotlin、Scala、Lua、Julia……

你也来快快加入挑战吧!参透程序设计语言的底层逻辑,用你最爱的语言实现 Monkey

业内佳评

编译原理是我上过的最有用的大学课程。学习为“玩具语言”编写词法分析器和运行时,有助于揭开计算机科学的神秘面纱。我建议所有不熟悉词法分析器、语法分析器和求值器的软件开发工程师阅读这套书。

——米切尔·桥本  天才程序员

编译器和语言开发是门槛较高的领域。我作为从业者,经常遇到培养新人却无法很快上手的问题。这套书很好地解决了此问题,在降低门槛的同时,又不损失丰富性,全面展示了开发编译器和程序设计语言的要素,因此我向所有对此有兴趣的读者推荐这套书。

——史斌(benshi001)  Go语言全球排名前50的贡献者

几年前看SICP的时候,我学习过如何写解释器。在书本上学习编译原理的过程是很枯燥的。这套书让我们可以一边学习理论,一边实践。我们能够看到,如何通过亲手实现解释器和编译器摆脱学习理论的枯燥过程。

——左书祺(@Draven)  云原生工程师、Kubernetes项目成员、《Go语言设计与实现》作者

如果你熟悉解释性语言,同时是Go语言爱好者,那么这套书就是为你编写的。使用Go语言从零实现一个解释器/编译器,不仅让你明白它们是如何工作的,而且你对Go语言也会有更深的理解。如果能够跟着书中内容实际动手实现一个解释器/编译器,那么你的技术一定会有很大的飞跃。

——徐新华  Go语言中文网站长、公众号“polarisxu”主理人

程序员的三大浪漫之一就是自制编程语言。得益于Go自身语法的简洁性和在工程方面的平衡性,这套书通过简明直接的代码,一步步地向读者揭示自制一门编程语言并不是高不可攀的事情。对于想自制编程语言又不想啃编译原理的读者,我推荐这套书。

——蒙卓(mengzhuo)  Go项目成员

这是一套很好的书,我曾在学习Go语言的时候有幸拜读过。现在,它终于有中译本了。自制解释器和编译器,一听就知道是很酷的事情。这套书的成功之处在于,它并非高屋建瓴,而是从零开始带着我们完成解释器和编译器的搭建,实战性很强。

——启舰  2017年度CSDN博客之星、前阿里巴巴研发工程师、“启舰杂谈”主理人

在软件设计中,开发人员经常需要开发一些高度抽象的定制模块。这些模块很可能涉及领域特定语言(DSL)的设计和解析。如果你很熟悉编译器的各个模块和运行原理,就可以很轻松地设计出适配自己项目的DSL。市面上关于编译器的书有很多,这些著作往往大而全,但是不易理解。这套书的作者对内容设计得非常精巧,通过从0到1创造一门编程语言来带领读者了解解释器和编译器的核心原理。我相信,它能给DSL设计者带来帮助。

——李正兴  腾讯高级工程师