译者序
Scala 3终于来了。
这是一次重大的更新,Scala编辑器从底层开始被全部重写。不得不说,这也是Scala创始团队的一次冒险,毕竟已经有很多成功的公司、团队和个人在早期版本,尤其是Scala 2.8之后的Scala生态中找到了自己的位置,大量以Scala编写的类库和业务代码在线上运行。
可Martin Odersky和他的团队就是铆足了劲要升级,想从根本上“修复”那些让Scala还不够理论完备的设计。但是理论完备有那么重要吗?站在编程语言设计者的角度,我倾向于肯定的答案。而站在使用者的角度,我更关心它带来了哪些变化,以及我能不能在使用中适应这些变化。
让我颇感意外的是,真正上手Scala 3,并没有想象中的那么困难重重。甚至饱受争议的缩进语法,也没有带来任何不适。原有的代码不需要修改,或者仅仅需要少量修改,就能顺利地通过Scala 3的编译。你很难相信这是一门全新的、从里到外重新实现的编程语言。
经过短暂的适应期,Scala 3的诸多新特性,如枚举、上下文参数、扩展方法和类型族等,就能被我灵活运用。这些新特性初看起来各有各的模样,并且实际使用下来,也多少都带着一些新编译器的“味道”,但是你能“嗅”到类型系统的某种一致性。Scala一直能在很多看似完全不同的概念之间找到关联,似乎总能透过表象,直面本质。这种感觉很微妙,让人既有些新奇,又非常熟悉。
Scala社区这几年也有非常大的变化和进步,最值得一提的是,ZIO这个面向“作用”(effect)的编程类库对业务代码中常见的模式进行了非常有洞见性的抽象,将函数式编程以一种类型健壮且高效的方式引入一线开发者的工具库中。很自然地,ZIO在顺利发布1.0版本之后,随着Scala 3的发布,也在第一时间全面“拥抱”Scala 3。
你手中的这本《Scala编程》已经是第5版,这一版针对Scala 3进行了全面的更新。更新主要体现在两个方面:首先,增加了对Scala 3主要的新特性的介绍,所有内容和示例代码都基于Scala 3重新梳理和编写;其次,在篇幅上进行了大幅度调整,最显著的是把《Scala编程》拆成了两卷,第一卷也就是现在这本《Scala编程》,它保留了Scala编程语言核心功能特性和设计理念的内容,让大家能够快速地理解、掌握并使用Scala编写实用的类库和业务代码,而第二卷为《Scala高级编程》,它将包含更多高级主题,且单独成册,面向那些对Scala高级特性(如宏和元编程)感兴趣的读者。
感谢Martin Odersky和他的团队为我们带来这样一门独特而优雅的编程语言,并且不惜冒着社区分化的风险(现在看来这个担心很可能是多余的)坚持对语言核心进行升级;感谢电子工业出版社及张春雨编辑,在第1版、第3版和第4版之后,继续引进本书的第5版;感谢编辑团队和其他幕后工作者的辛勤付出;感谢家人无条件的支持和鼓励,你们是我永远的挚爱。
在本书的翻译过程中,译者虽已尽力忠实呈现原著的本意,但毕竟能力有限,问题和疏漏恐难以避免,恳请各位读者批评指正,联系地址:gaoyuxiang.scala@gmail.com。
高宇翔
2021年于上海