Twitter 启动新 Scala 编译器开源项目,旨在提高编译速度

  • 薛命灯

2017 年 8 月 20 日

话题:语言 & 开发架构

Twitter 在 GitHub 上启动了一个全新的 Scala 编译器开源项目,编译器的名字叫作Reasonable Scala Compiler(简称 rsc),旨在提升编译速度。

Twitter 目前几乎拥有世界上最多的 Scala 代码,从整体来看,在公司层面提升 Scala 代码的编译速度对于他们来说是很有意义的。

项目的目标如下。

  • 大幅度提升 Scala 代码的编译速度
  • 研究 Scala 各种特性的编译时间开销
  • 找出可以使用 rsc 进行编译的 Scala 特性子集
  • 分享经验给其他 Scala 编译器

项目的目标不包括以下几点。

  • 完全向后兼容(可以考虑Lightbend Scala
  • 新语言特性(可以考虑DottyTypelevel Scala
  • 类型系统的改进(可以考虑 Dotty 或 Typelevel Scala)
  • 运行时性能(视情况而定)

据悉,新编译器有望把一般 Scala 代码的编译速度提升 5 到 10 倍。首先,新编译器类型检测器受Kentucky Mule项目的启发,Kentucky Mule 是由 Grzegorz Kossakowski 开发的一个旨在探索如何改进 Scala 编译器速度的项目,主攻类型检测器。其次,新编译器的编译管道只需要遍历 4 遍语法树,相比其他编译器有了大幅改进,比如 Lightbend Scala 和 Typelevel Scala 需要 20 多次,Dotty 需要 15 次以上。再则,新编译器只支持 Scala 的一个子集,这样就可以专注于提升子集的编译速度。这个子集被叫作“Reasonable Scala”,而这也就是为什么他们把编译器叫作“Reasonable Scala Compiler”。新编译器将从 Scala 的一些小特性着手,在保持性能达标的同时,逐步支持更多的特性。

社区对此也展开了热议。

提升编译速度对于开发者来说总是有好处的,尽管它不一定是最大的关注点。不过新编译器只支持 Scala 的一个子集,而且不保证完全兼容性,所以有人担心 Scala 生态系统会因此变得支离破碎,比如有些包只能与特定的编译器协同工作。

也有人解释说,新编译器不会造成 Scala 生态系统的支离破碎,因为官方已经声明,所有的 Reasonable Scala 都将与标准 Scala 兼容。

至于提升编译速度究竟会给开发者带来什么实质性的好处,项目负责人 Eugene Burmako 解释说,如果把编译时间从 10 到 20 分钟降到 1 到 2 分钟,不仅可以提升效率,还为在每次提交代码时运行代码分析工具带来了可能性。而对于增量编译来说,如果把时间从 3 到 5 秒降到 0.3 到 0.5 秒,那么就有可能随时随刻运行代码分析工具,可以立即得到编译反馈。

对项目持怀疑态度的人主要还是担心新编译器只支持部分 Scala 特性以及存在兼容性问题,因此可能不会被太多人所采用。对此,Eugene Burmako 回应说:

我们不想通过采用率来衡量新编译器成功与否。

我们将会把我们的经验分享给 Lightbend Scala 和 Dotty 的开发者,来帮助他们一起改进他们的编译器。如果能做到这样,我们就很开心了。

Grzegorz Kossakowski 的 Kentucky Mule 项目也只支持 Scala 的一个子集,甚至没有人把它应用在生产项目上。尽管如此,它仍然算是一个很成功的项目,因为在这个项目之前,我们甚至都不知道原来 Scala 的类型检测器可以是并行的。


感谢郭蕾对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

语言 & 开发架构