Scala 3 二进制兼容性问题

问题描述 投票:0回答:1

当我准备帮助我的组织采用 scala 3 时,我正在努力找出需要解决的潜在挑战。

一般来说,我正在准备与 scala 3 进行二进制兼容性更改,但有些事情对我来说不太清楚。最好用以下问题来概括:

如果一个库是用 scala 3.4.1 开发的,并且有人尝试在运行 3.2.1 的项目中使用它,会发生什么? 根据我的理解,鉴于向前兼容性不能保证,将会出现运行时异常。完全可以理解。 所以事实上真正的问题是,鉴于我们在发布库时删除了第二个数字,这意味着库发布为 3 而不是** 3.4**,用户如何知道他不能使用该库在他的项目中,该项目位于 3.2.

我想知道社区正在采取哪些最佳实践来优雅地处理这种情况。基本上,我们假设用户将拥有良好的测试套件,这将因运行时故障而失败,然后发现是时候升级他们的项目版本了,“据说”他们现在可以安全且系统地执行此操作,因为的强大保证的向后兼容性。我说当然是因为,在一个组织的背景下,考虑到 jvm 生态系统,在升级任何东西之前,需要考虑很多问题。

我们期望相关各方(库维护者和用户)采取什么措施,以使特定场景不再那么痛苦。

scala scala-3
1个回答
0
投票

来自长期兼容性计划

Scala 3 保证所有版本之间的向后兼容性以及同一次要行中的补丁版本之间的向前兼容性。这意味着仅当 b 大于或等于 a 时,Scala 3.b.y 才能消耗 Scala 3.a.x 的输出。例如,Scala 3.0.2 编译器的输出可以由 Scala 3.0.1 或 3.1.0 使用。另一方面,使用 Scala 3.1.0 编译的代码不能成为任何使用 3.0.2 编译的项目的依赖项。

最佳实践

一旦 LTS 和 Next 模型到位,我们建议针对不同的用户组采取以下做法:

商业项目业主

我们建议您坚持使用 LTS 版本。它将为您提供最好的工具支持和稳定的编译器。如果您要从 Scala 2 迁移更大的项目,您应该将其直接迁移到最新的 LTS。

您还可以选择更新最新的次要版本。这将允许您在新功能添加到语言后立即使用它们。但是,您需要为频繁的编译器更新做好准备。否则,您的项目可能会得到不受支持的语言版本。

库维护者

除非您的库是围绕仅在 Next 上提供的某些新语言功能构建的,否则您应该坚持使用最新的 LTS 版本以获得尽可能广泛的用户群。如果您的库包含多个模块,其中一些可能需要 Scala Next。只要您记住使用 Scala LTS 编译的模块不能依赖它们就完全没问题(反之亦然)。此外,从 Scala LTS 使用您的库的用户将无法访问使用 Next 构建的模块。

请记住,当您升级编译器的次要版本时(例如,从上一个 Scala LTS 行移动到下一个),您还需要升级库的次要版本。

爱好或独立研究项目的作者

随意使用 Scala Next。然后您将能够使用所有库,包括 Scala LTS 和 Scala Next 的库。您还可以测试该语言的最新和实验性功能。

当前 LTS 为 3.3.x

© www.soinside.com 2019 - 2024. All rights reserved.