dotty/scala3 与 scala-native 和 scala-js 等技术的集成有多无缝?

How seamless will be dotty/scala3 integration with tech like scala-native and scala-js?

我们应该注意哪些限制?它会要求我们使用一些类似 scalafix 的工具吗?还是开箱即用?

总体上从 2.13 迁移到 3.0:

  • Dotty 使用 2.13 集合,因此无需在此处进行更改 - 事实上 2.13 与 3.0 非常接近,以至于维护人员决定跳过 2.14 版本,该版本本应作为垫脚石
  • 宏将需要重写 - 这是最大的问题,但是库维护者有时间去做,有些甚至现在正在重写(参见 quill
  • 很少有弃用,例如forSome 存在类型的语法消失(参见:documentation 上删除的功能)
  • 库可能需要扩展自身以支持新内容(union/intersection/opaque 类型),但在您开始在代码中使用新内容之前,一切都像以前一样工作
  • 除此之外,旧的 Scala 代码无需任何更改即可正常工作

即使现在,Scalafix 也在产品中使用,例如Scala Steward 能够在将库更新到新版本时应用迁移。

Scala.js 是 JVM 旁边的 already supported as Dotty backend

最近 Scala Center 接管了 Scala-native,因此我们应该期望 Scala-native 开发会加速(它有点停滞)并且它最终应该作为另一个受支持的后端登陆。我不知道他们是否设法在 Dotty 发布之前交付,但我对此表示怀疑。目前,Scala-native 必须首先获得对 2.12 and/or 2.13 的支持。想了解或在Gitter上提问的请追踪this issue

长话短说:您需要等待您使用的库移植到 Dotty,然后更新您的宏(如果您编写了任何宏),此外,迁移对于 JVM 和 JS 后端来说应该非常简单。 Scala native 可能需要更多时间。