译者序

译者序

本书是 Ruby 之父松本行弘最新的作品。在书中作者讲述了从头开始设计一门新的流处理语言 Streem 的过程。凭借作者在业界的影响力,Streem 语言在开发阶段就已经在 GitHub 上收获了四千多 star。

虽然 Streem 语言依然在开发阶段,不适合在正式项目中使用,但是本书最大的价值并不在于 Streem 语言本身。正如作者在文中所说,很多编程语言相关的书都是在介绍一门语言该如何使用,自制编程语言的书也仅仅涉及语言的实现,讲解语言为什么这样设计的书少之又少,而这本书就属于后者。从简单的如何为语言取名,到复杂的如何设计多线程、垃圾回收等,作者在书中事无巨细地介绍了语言设计的方方面面。对于想了解语言为什么会这样设计、语法为什么是这样的读者来说,本书是一本不可多得的宝贵资料。

练武的有武痴,而作者简直就是“语言痴”(或者“语言控”,褒义),几十年来一直孜孜不倦地研究各种语言,并且与许多语言设计者有过直接的交流,所以对很多语言都很熟悉,在书中他也旁征博引地介绍了这些语言是如何设计的。因为很多语言的语法都是相通的,所以即使不打算自己去设计新的语言,了解语言设计的知识,对语言的学习也是大有裨益的。比如 3.4 节讲解了模式匹配,对于 Java 程序员理解 Scala 语言的模式匹配功能应该很有帮助。4.4 节综合介绍了垃圾回收的几种算法,写得通俗易懂,与 Java 或者 Objective-C 等语法书一般只介绍语言中用到的垃圾回收算法相比,作者的介绍更有助于读者深入理解垃圾回收,了解各种算法的优缺点,这也许在面试时就能用得上。

作者在业界活跃几十年,学识非常渊博。第 5 章就是一个很好的体现。作者在第 5 章讲解了管道编程、CSV 文件处理、时间表示、统计以及随机数等多个主题,并围绕这些主题介绍了大量相关的知识和算法。比如 5.2 节介绍了流处理相关的 mapreduceflatmap 等函数,这些知识对学习大数据的 mapreduce 和 spark 流处理会很有帮助;5.5 节介绍的统计算法和 5.6 节介绍的随机数生成算法让译者在翻译时也受益匪浅。这些知识说不定什么时候就能派上用场,如果你记住了 5.5 节介绍的蓄水池抽样算法,那么海量数据随机抽样之类的问题就难不倒你了。

虽然作者是业界的风云人物,但在书中毫不讳言自己不擅长哪些领域、哪些地方借鉴了他人的实现,非常平易近人,不会让人感觉高不可攀。阅读本书就像是在跟一位谆谆善诱的前辈聊天,他会告诉你自己是怎么设计语言的、为什么要这样设计、别人是怎么做的、具体要怎么实现、在自己实现不了的情况下如何借鉴别人开源的东西、如何取得许可,等等,非常有趣。作者还在书中设置了“时光机专栏”,其中添加了对正文内容经过一段时间沉淀之后的思考,这些内容也很有趣,请读者不要错过。

另外,作者在书中多次流露了“最近太忙了,这个功能有机会再实现吧”的想法,让译者也心有戚戚焉。

希望读者能在阅读本书的过程中体验到语言设计的乐趣,有所收获。

由于译者水平有限,书中恐有疏漏和错误之处,还请读者随时指正。

在此衷心感谢图灵公司的各位编辑在翻译过程中给予的帮助,感谢博学儒雅的上司王蕴韬在工作上的指导,感谢亲友杨玉生、黄旭、戎政给予的支持和鼓励,最后也要感谢一直给我家庭温暖的父母、岳父母、妹妹一家、妻子和儿子。

郑明智

2019 年 5 月于余杭南湖

目录