vlambda博客
学习文章列表

Scala路线图:跳过2.14,明年上Scala 3

Scala 官方公布了 Scala 2 接下来的发展计划,开发团队表示工作将转向 Scala 3,而不是开发 Scala 2.14。

重点虽然转移到 Scala 3,但将继续维护 Scala 2.13,以确保社区有足够的时间谨慎地过渡到 Scala 3。

长期以来,开发团队认为必须有 2.14 版本才能确保顺利过渡到 3,但是经过大量的研究和讨论,现在确信完全不需要 2.14。这样可以带来两方面的好处:

  • Scala 3 将可以更快地投入生产环境。在完善编译器和升级相关工具方面,有许多工作要做,同时将帮助生态系统升级。

  • 无需为 2.14 重建 Scala 库和工具生态系统,从而节省了维护人员的时间以准备 Scala 3。

主要目标是提供从 Scala 2 到 3 的平滑且增量的迁移路径,要实现此目的,Scala 2.13 和 3.0 将使用相同的标准库,并且它们的编译器后端将以相同的方式输出字节码。

共享标准库

共享标准库消除了 Scala 2.13 和 3 之间的主要潜在差异,并有助于迁移。

但是,这也意味着对标准库的二进制不兼容更改将不得不等到 Scala 3.x 系列中的稍后版本,届时将拥有补救二进制不兼容的工具。更具体地说,由于 Scala 2.13 在其系列之内保持向前和向后二进制兼容,因此无法添加或删除任何类或方法。

如果在从 2 到 3 的迁移期间,迫切需要在这些限制之外发展标准库,开发团队可能最终仍会选择发布 Scala 2.14 版本。

共享的 ABI

除了标准库,通过共享 ABI,Scala 3.0 和 2.13 工件可以共同存于类路径上并且可以无缝地互操作,这样可以逐步迁移并简化测试。

目前 Scala 3 已经向后兼容,它可以使用由 Scala 2.13 构建的库。为了实现向前兼容,Scala 3 编译器将提供一种机制来确保公共接口位于公共语言子集中,以便可以在 Scala 2.13 中使用它。这意味着作为库作者的开发者可以直接使用某些 Scala 3 内容,而无需从 Scala 2.13 升级。

除了技术互操作性之外,开发团队还将关注于测试和改进工具,以确保顺利迁移。例如,原定于 2.14 版本中进行的迁移警告将在 2.13 中实施。

除此之外,Scala 官方还罗列了一些相关问题,包括争取在 2020 年年底之前发布第一个候选版本、如何采用类型化抽象语法树 TASTy 处理二进制兼容性问题、宏无法从 2.x 直接迁移到 3.0、以及性能、测试工具与 IDE 支持等,详情查看官方说明:

https://www.scala-lang.org/2019/12/18/road-to-scala-3.html

推荐阅读