【问题标题】:How seamless will be dotty/scala3 integration with tech like scala-native and scala-js?dotty/scala3 与 scala-native 和 scala-js 等技术的无缝集成如何?
【发布时间】:2023-04-02 04:56:01
【问题描述】:

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

【问题讨论】:

  • Scala 3.0 将使用与 Scala 2.13.x 相同的标准库,因此如果您使用的是 2.13.x,那么对于大多数人来说,一般迁移将相当容易。 Scala-native 似乎仍在标准库的2.11 上,因此可能需要进行很多更改

标签: scala dotty scala-3


【解决方案1】:

一般从 2.13 迁移到 3.0:

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

Scalafix 甚至现在也在 prod 上使用,例如Scala Steward 能够在将库更新到新版本时应用迁移。

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

最近 Scala Center 接管了 Scala-native,所以我们应该期望 Scala-native 的开发会加快(有点停滞),它最终应该会成为另一个受支持的后端。我不知道他们是否能够在 Dotty 发布之前交付,但我对此表示怀疑。目前,Scala-native 必须首先获得对 2.12 和/或 2.13 的支持。如果您想知道或在 Gitter 上提问,请跟踪 this issue

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

【讨论】:

  • 是不是隐含被重做的其他东西可能需要一些工作?我想一些隐含的繁重代码库可能需要重新考虑他们的设计
  • 在 3.0 旧的implicits 以同样的方式工作。您可以继续使用更新的关键字,因为它们最终希望删除隐含,但在 3.0 中,它只是可选的关键字替换。你不需要木兰花或半无形的,因为衍生将被内置......但这是我现在能想到的唯一突破性的设计变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多