【问题标题】:Is there a conversion/migration guide for Scala v2.9 to current v2.12.x?是否有 Scala v2.9 到当前 v2.12.x 的转换/迁移指南?
【发布时间】:2018-04-23 20:00:26
【问题描述】:

有一个我想使用的 Scala 库 (PiStache),它是为 Scala v2.9 编写的,并且在 7 年内没有更新。

问:谁能指出 Scala v2.9 到最新 v2.12.x 的转换或迁移指南?

我在网上搜索过任何转换或迁移指南,但没有找到。我看到的唯一选择是查看连续的发行说明,希望它们列出不兼容性。

我发现了各种讨论主题,这些主题描述了为什么次要版本之间存在不兼容,但没有需要进行更改的简洁列表。当然,我可以采用试错法,简单地在 2.12.x 下编译库,然后响应错误消息,但我希望避免这个(可能)耗时的过程。

【问题讨论】:

  • 一般来说,Scala 有一个发布周期的弃用期。因此,任何使用scalac -deprecation 编译时出现 0 个警告和错误且未使用 Scala 2.9 中的任何实验性功能的代码,也应该在 2.10 中工作。但是,没有任何工具可以跨越一个以上的版本,您必须一次迈出一步。请注意,当您确实收到弃用警告时,它们通常还会说明什么可以用作替代品以及如何使用。
  • @JörgWMittag 谢谢!这是一种非常实用和系统的方法,尽管可能很耗时。
  • @JörgWMittag 碰巧的是,这个特殊的库几乎没有外部依赖项和非常小的代码库,所以我期待一个简单的迁移。 (著名的遗言:-)

标签: scala migration


【解决方案1】:

我找到的最好的迁移指南在这里(2 部分),重点介绍 2.9 -> 2.10 迁移:

tl;dr:大部分迁移工作都与库相关,如果库作者有更新(兼容)的版本,那么你很好。但是您可能会偶然发现 Scala 库的各种小改动:

在迁移到 2.10 之前,您应该注意 Scala 类库本身的许多变化。真正大的变化是 Scala 演员被 Akka 弃用。您仍然可以通过从 Scala 2.10 发行版中导入 scala-actors 工件来使用它们,但建议完全迁移到新的 actor 系统,因为这也可能会被 2.10.1 淘汰。 Typesafe 的温和人士提供了非常全面的迁移指南来帮助您完成工作。

我们遇到的不太普遍的 API 更改包括:

  • List.elements 已弃用,取而代之的是 List.iterator;
  • TraversableOnce.toIndexedSeq 不再接受类型参数。这实际上在我们的代码库中非常普遍,会导致大量编译错误,并且可以通过删除类型参数轻松解决(这在开始时是无关紧要的);
  • Scala 演员的Actor.receive 方法现在是公开的(以前受保护)。这必须通过删除受保护的修饰符在我们现有的几乎所有参与者中进行纠正;
  • 偶尔细微的 API 更改需要较小的代码修复,例如Enumeration and Mapping

关于 2.10 -> 2.11(来自Release Notes,已添加重点):

在 2.10.x 上编译而没有弃用警告的代码应该在 2.11.x 上编译(我们不保证对于实验性 API,例如反射)

关于 2.11 -> 2.12(来自Release Notes,已添加重点):

虽然 Scala 2.11 和 2.12大部分源代码兼容以促进交叉构建,但它们不是二进制兼容的。这使我们能够不断改进 Scala 编译器和标准库。

注意:对于使用 Apache Spark 的任何人,请注意最新版本 2.3.0 与最新版本 Scala 2.12.x 不兼容,因此您必须使用 Scala 2.11.x,直到这种情况发生变化(很快,从我见过的讨论)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2022-07-08
    • 2010-09-15
    相关资源
    最近更新 更多