当前位置:网站首页>龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书
龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书
2022-06-25 10:46:00 【turingbooks】
相传,编译原理界有三大圣书:
龙书是为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设计者带来帮助。
——李正兴 腾讯高级工程师
** 一键下单
边栏推荐
- Oracle彻底卸载的完整步骤
- 一文了解Prometheus
- Shen Ying, China Academy of communications and communications: font open source protocol -- Introduction to ofl v1.1 and analysis of key points of compliance
- 2022-06-24:golang选择题,以下golang代码输出什么?A:1;B:3;C:4;D:编译失败。 package main import ( “fmt“ ) func mai
- Google Earth Engine(GEE)——evaluate實現一鍵批量下載研究區內的所有單張影像(上海市部分區域)
- 垃圾回收机制
- Shen Lu, China Communications Institute: police open source Protocol - ofl v1.1 Introduction and Compliance Analysis
- Network protocol learning -- lldp protocol learning
- 今天16:00 | 中科院计算所研究员孙晓明老师带大家走进量子的世界
- 每日3题(2)- 找出数组中的幸运数
猜你喜欢
Opencv learning (II) -- installing opencv on raspberry pie
Ouverture de l'inscription | le troisième marathon des hackers de pagaie est arrivé comme prévu.
The real difference between i++ and ++i
Binder explanation of Android interview notes
Use of three-level linkage plug-ins selected by provinces and cities
金仓KFS数据级联场景部署
一个五年北漂的技术er,根据这些年的真实经历,给应届生的一些建议
【观察】ObjectScale:重新定义下一代对象存储,戴尔科技的重构与创新
【文件包含漏洞-03】文件包含漏洞的六种利用方式
Detailed explanation of Android interview notes handler
随机推荐
[image fusion] image fusion based on morphological analysis and sparse representation with matlab code
Android:kotlin中Gson与JSON的泛型映射解析
Kotlin implements a simple login page
Continuous delivery jenkinsfile syntax
Output reading: apply what you have learned
Netease's open source distributed storage system curve officially became the CNCF sandbox project
Detailed explanation of Android interview notes handler
Shardingsphere proxy 5.0 sub database and sub table (I)
Nuxtjs actual combat case
Network remote access using raspberry pie
Is it safe to speculate in stocks by mobile phone?
Daily 3 questions (2) - find out the lucky numbers in the array
Flask blog practice - realize the latest articles and search in the sidebar
A five-year technical Er, based on the real experience of these years, gives some suggestions to the fresh students
TASK03|概率论
Android之Kotlin语法详解与使用
keep-alive
Macro application connector\
每日3題(3)-檢查整數及其兩倍數是否存在
1-7snapshots and clones in VMWare