来自 Scala 3 团队的问候!我们带来了新版本的 Scala 编译器和一些关于前向兼容性改进的激动人心的消息。
Scala 3.1.1 的改进
Scala 3.1.1 是一个专注于错误修复的补丁版本。尽管该语言没有新增内容,但您仍然可以发现一些明显的改进:
-
您可以使用
using
子句在函数体中引入类型之间的子类型关系。现在,应该可以编译如下代码。只要给定的实例在范围内,任何类型的值
A
都可以用于预期类型的值:B
A <:< B
def example[A, B](a: A)(using A <:< B) =
val b: B = a
???要了解更多信息,请参阅PR #13662和相关问题。
-
可以为 Scala 3.0.x 编译的分层总和类型正确调用镜像。现在可以安全地为使用 3.1.0 之前的编译器编译的类型依赖项派生类型类。(PR#14100)。
-
Dual Scala 2/3 宏现在可以在非实验范围内声明(PR #13795)。
-
Scaladoc 文档具有改进的 UI。
有关修复的完整列表,请查看GitHub 上的完整变更日志。
3.1.2-RC1 和前向兼容性改进
除了 3.1.1,我们还发布了编译器下一个补丁版本的第一个 RC 版本。3.1.2-RC1 包含进一步的修复,但最重要的是,这是我们提高 Scala 前向兼容性的第一步。
Scala 3 在次要版本之间具有出色的向后兼容性保证。现在,这意味着使用 Scala 3.1 编译的代码可以毫无问题地依赖使用 3.0 发布的库。然而,相反的情况是不正确的。使用 3.0 编译的代码无法读取使用 3.1 编译的依赖项。在最近发布的 Scala 3.1.0 之后,我们可以看到库在更新编译器版本时应该非常谨慎,因为它会迫使该库的每个用户遇到问题。我们不希望库作者被困在旧版本的编译器上,因为这意味着他们被锁定在许多错误修复之外,或者我们需要花费巨大的精力将每个错误修复向后移植到所有过去的版本控制行。
我们目前缓解这些困难的计划在贡献者讨论中进行了描述,您可以在其中自由留下您的反馈。我们已经实施了解决方案的第一个也是最重要的部分,并准备好进行公开测试。从 Scala 3.1.2-RC1 开始,编译器能够生成可供其旧版本使用的输出。要启用它,您需要使用实验-Yscala-release
标志指定最小的目标次要语言版本。
我们希望将来作者将使用最新可用的编译器版本,并将其-Yscala-release
设置为支持他们需要的所有功能的最低语言版本。这样,他们将能够从所有错误修复中受益,而不会限制他们的潜在受众。
因此,例如,使用带有-Yscala-release:3.0
标志的 Scala 3.1.2-RC2 编译您的库,您可以让仍在使用 Scala 3.0 的人依赖您的库。这有一些限制,尤其是您的库不能有任何使用-Yscala-release
高于 3.0 的版本编译的依赖项。您也将无法使用 3.0 之后添加到标准库中的任何符号。它们在代码和文档@since
中由此版本中添加的注释标记。
一个重要的注意事项是,该-Yscala-release
标志是实验性的,尚未在编译器的任何稳定版本中可用。这意味着构建工具,例如 SBT 或 Mill,还没有意识到它的存在。当然,您可以在构建文件中声明使用该标志,编译器会尊重它。但是,可能仍然存在一些问题,例如生成的工件取决于 stdlib 的不正确版本。在 3.1.2 稳定版发布之前,我们将尽最大努力帮助解决这些小问题。
新标志的详细说明可以在二进制兼容性的参考页面中找到。
如果您对 3.1.2-RC1 带来的其他更改感兴趣,一如既往地在 GitHub 上有一个更改日志。
贡献者
感谢所有使此版本成为可能的贡献者。
根据git shortlog -sn --no-merges 3.1.0..3.1.1
这些是:
50 Fengyun Liu
43 Martin Odersky
26 Olivier Blanvillain
24 Kacper Korban
21 Filip Zybała
18 Dale Wijnand
18 Nicolas Stucki
17 Phil
13 Andrzej Ratajczak
10 Guillaume Martres
10 noti0na1
8 Paweł Marks
7 Jamie Thompson
5 soronpo
5 Tom Grigg
3 Yichen Xu
3 Dmitrii Naumenko
3 ghostbuster91
3 Julien Richard-Foy
2 Stéphane Micheloud
2 bjornregnell
2 Vadim Chelyshov
1 ysthakur
1 Daniel Esik
1 EnzeXing
1 Jasper Moeys
1 Katja Goltsova
1 Matthieu Bovel
1 Ondrej Lhotak
1 Oron Port
1 Rikito Taniguchi
1 Seth Tisue
1 Som Snytt
1 Sébastien Doeraene
1 Tomasz Godzik
1 oronpo
文章评论