Scala 3 稳定版来了!发布公告写道:“经过 8 年的努力开发,在此期间共产生了 28000 多次 commit、7400 多个 PR,以及关闭了 4100 多个 issue。从2012年12月6日 Scala 3 的首个 commit 算起,共计超过 100 人为项目做出了贡献。现在,Scala 3 通过结合类型理论的最新研究以及 Scala 2 的行业经验,Scala 的第三次迭代版本变得更易于使用、学习和扩展。”
按照规划,3.x 期间的更新频率是每隔 6 周发布一次常规维护更新。
升级方面,对于 Scala 2.x 用户,开发团队提供了从 Scala 2 到 3 的平滑且增量的迁移路径,Scala 2.13 和 3.0 将使用相同的标准库。共享标准库消除了 Scala 2.13 和 3 之间的主要潜在差异,并有助于迁移。但这也意味着对标准库的二进制不兼容更改将不得不等到 Scala 3.x 系列中的稍后版本,届时将拥有补救二进制不兼容的工具。更具体地说,由于 Scala 2.13 在其系列之内保持向前和向后二进制兼容,因此无法添加或删除任何类或方法。
除了标准库,通过共享 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 3 值得关注的新特性。
新类型
- 交集类型
- 并集类型
- 类型 Lambda
- 匹配类型
- 依赖函数类型
- 多态函数类型
上下文抽象
- Using 子句
- 扩展方法
- 实现 Type Class
- Type Class 推导
- Multiversal Equality
- 上下文函数
- 隐式转换
其他新特性
- Trait 参数
- 透明 Trait
- 统一应用函数
- Export 子句
- 不透明类型别名
- 开放类
- 参数解元组
- Kind 多态
- Matchable Trait
- @threadUnsafe 注解
- @targetName 注解
- 新控制语法
- 可选括号
- 显式 null
- 安全初始化
- TypeTest
- ……