在 GitHub 上编辑此页面

源代码兼容性

Scala 3 不保证不同次要语言版本之间的源代码兼容性(例如,在 3.x 中有效的某些语法可能会在 3.y 中被弃用,然后在 y > x 时被淘汰)。还有一些在 Scala 2 中有效但在 Scala 3 中不再有效的语法结构。但是,编译器提供了一种可能性,可以指定在特定文件中或全局用于编译器运行的所需语法版本,以使版本之间的迁移更容易。

Dotty 编译器当前支持的默认 Scala 语言语法版本是 3.2。 也可以指定其他语言版本。

  • 3.0-migration: 与 3.03.1 相同,但具有 Scala 2 兼容模式,有助于将 Scala 2.13 源代码迁移到 Scala 3。 特别是,它

    • 将一些在 Scala 3 中不允许的 Scala 2 结构标记为迁移警告,而不是硬错误。
    • 更改了一些规则,使其更宽松,并与 Scala 2.13 向后兼容。
    • 在 Scala 2.13 和 3.0 之间的语义发生变化的地方提供一些额外的警告。
    • -rewrite 结合使用时,提供从 Scala 2.13 到 3.0 的代码重写。
  • 3.03.1: scala 版本 3.0.03.1.3 中包含的默认功能集。

  • 3.2-migration: 与 3.2 相同,但与 -rewrite 结合使用时,提供从 Scala 3.0/3.13.2 的代码重写。

  • 3.2: 与 3.03.1 相同,但此外

    • 更严格的模式绑定 现在已启用(在早期 3.x 版本中是 future 的一部分),对可反驳模式生成警告。 这些警告可以被静默以实现相同的运行时行为,但在 future 中它们会变成错误,并且可反驳模式将无法编译。
    • 非局部返回 现在在使用时会产生警告(它们在 future 下仍然是错误)。
  • 3.3-migration: 与 3.3 相同。

  • 3.3: 与 3.2 相同,但此外

  • future-migration: 与 future 相同,但包含了从 3.3 迁移的额外帮助程序。类似于 3.0-migration 下提供的帮助程序,这些帮助程序包括迁移警告和可选重写。

  • future: 对 3.3 之后 3.x 版本中将引入的更改的预览。此版本中删除了一些 Scala 2 特定的习惯用法。此版本支持的功能集可能会随着时间的推移而增长,因为功能变得稳定以供预览。

有两种方法可以指定语言版本

  • 使用 -source 命令行设置,例如 -source 3.0-migration
  • 在源文件顶部使用 scala.language 导入,例如
package p
import scala.language.`future-migration`

class C { ... }

语言导入优先于源文件中指定的命令行设置。在一个源文件中只允许一个指定源版本的语言导入,并且它必须出现在该文件中的任何定义之前。

注意:Scala 3 迁移指南 提供了更多信息,以帮助 Scala 程序员从 Scala 2.13 迁移到 Scala 3。