【问题标题】:Is ruby 2.7 and earlier code compatible with ruby 3.0.1?ruby 2.7 和更早的代码是否与 ruby​​ 3.0.1 兼容?
【发布时间】:2021-08-21 20:07:22
【问题描述】:

我很难决定是否在 ruby​​ 3.0.1 和 ruby​​ 2.7 中构建新的 ruby​​ gem。以 >=3.0.0 版本编写的 ruby​​ 代码是否向后兼容 >=2.5 或 >=2.7 版本?在 ruby​​ 2.7 中工作的人可以使用 >=3.0.1 编写的 gem,在同一个注释中,在 >=3.0.1 中工作的人可以使用 ruby​​ 2.7 编写的 gem吗? 3.0.1 中是否有任何重大更改导致难以从 2.7 升级?

【问题讨论】:

  • 一般来说答案是:视情况而定。显然 3.0 是一个主要版本,因此它实现了 = 3.0,则否则可能没有(请参阅答案 1。) 3.0.1 可以使用 2.7 编写的 gem 吗? (见答案 2)
  • 是否存在导致升级困难的重大更改?这取决于 3.0 实施了一些可能使其变得困难的更改(特别是如果您忽略了以前的弃用警告)。阅读更多here 并自行决定

标签: ruby upgrade backwards-compatibility


【解决方案1】:

在 >=3.0.0 版本中编写的 ruby​​ 代码是否向后兼容 >=2.5 或 >=2.7 版本?

没有。例如:

自 2.7 以来的其他显着变化。关键字参数与其他参数分开。原则上,在 Ruby 2.7 上打印警告的代码将不起作用。

https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/

但是,可以使用 Ruby 的 子集 编写与 2.5 到 3.0 兼容的库。例如,PaperTrail 旨在做到这一点。

# https://github.com/paper-trail-gem/paper_trail/blob/master/.github/workflows/test.yml#L66
ruby: [ '2.5', '2.7', '3.0' ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2015-05-24
    • 1970-01-01
    • 2012-09-21
    相关资源
    最近更新 更多