ruby 2.7 和更早的代码是否与 ruby 3.0.1 兼容?

Is ruby 2.7 and earlier code compatible with ruby 3.0.1?

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

Is ruby code written in versions >=3.0.0 backwards compatible with versions >=2.5 or >=2.7?

没有。例如:

Other notable changes since 2.7. Keyword arguments are separated from other arguments. In principle, code that prints a warning on Ruby 2.7 won’t work.

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' ]