龙书虎书鲸书啃不动?试试豆瓣评分 9.5 的猴书
相传,编译原理界有三大圣书:
龙书是为 Compilers: Principles, Techniques, and Tools;
虎书是为 Modern Compiler Implementation in C;
鲸书是为 Advanced Compiler Design and Implementation。
三大巨头名声在外,但要吃透其中奥妙绝非易事。
图灵君常常收到读者询问:有没有轻量级一些的编译原理入门教程,实战性很强的那种?
现在终于可以给出答案了!在介绍这套书之前,先来看看读者给出的这样一条评论:
“如果我被困在一座岛上,必须构建一门编程语言,那么这就是我要唯一带在身边的书。”
这套书的英文版具有很高的辨识度,并且在豆瓣上获得 9.5 和 9.4 的高分。
作者 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 倍。
必须先读彩猴书,再读金猴书吗?
两本书有一个进阶关系。虽然你完全可以按照自己的兴趣任意选择一本读,但最佳的阅读顺序仍然是先读彩猴书,再读金猴书。
这套书适合谁
为什么用 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 设计者带来帮助。
——李正兴 腾讯高级工程师
☟☟ 一键下单
版权声明: 本文为 InfoQ 作者【图灵教育】的原创文章。
原文链接:【http://xie.infoq.cn/article/8644836ce1172c509f562536e】。文章转载请联系作者。
评论