ruby 2.7及更早版本的代码是否与ruby 3.0.1兼容?

ruby 2.7及更早版本的代码是否与ruby 3.0.1兼容?,ruby,upgrade,backwards-compatibility,Ruby,Upgrade,Backwards Compatibility,我很难决定是否在Ruby3.0.1和Ruby2.7中构建一个新的RubyGem。以>=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.0版本编写的ruby代码是否向后兼容>=2.5或>=2.7版本 否。例如: 自2.7以来的其他显著变化。关键字参数与其他参数分开。原

我很难决定是否在Ruby3.0.1和Ruby2.7中构建一个新的RubyGem。以>=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.0版本编写的ruby代码是否向后兼容>=2.5或>=2.7版本

否。例如:

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

但是,可以使用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' ]

一般来说,答案是:视情况而定。显然,3.0是一个主要的版本,因此它实现了<3.0不支持的语法特性和对象方法,但是有很多特性和方法保持不变。2.7可以使用3.0.1编写的宝石吗?这取决于gemspec可能会设置合格的ruby版本,因此如果将其设置为>=3.0,则没有其他可能(参见答案1)。3.0.1能否使用2.7中编写的gem?(参见答案2)是否存在导致升级困难的突破性更改?它依赖于3.0实现了一些可能使其变得困难的更改(特别是如果您忽略了以前的弃用警告)。多阅读,自己决定