我使用的是红宝石的最新版本(2.5.1),但有一些旧宝石。我有一些问题。我想知道,某些宝石仅适用于某些版本的红宝石是否正确?
如果一颗宝石与红宝石2.3.0一起使用,是否真的可以肯定地将它们与2.5.1一起使用(即因为2.5.1> 2.3.0)?还是不总是这样?
我想我要问的是,新的红宝石版本是否总是与旧宝石向后兼容?
答案 0 :(得分:2)
如果一颗宝石与红宝石2.3.0一起使用,那么确实可以 使用2.5.1
这是不正确的。编程语言在不断发展。这意味着语言维护者正在对它们是新功能或从语言中删除旧组件进行大量改进或重构。当语言社区宣布使用ruby中的新功能或删除诸如Fixnum
之类的旧功能时,开发人员应遵循说明并相应地重构其代码库。换句话说,开发人员应该具有良好的测试覆盖率,以检测任何故障并立即进行修复。
在您的情况下,据我了解您没有测验范围。唯一但简单的事情是将您宝石的版本升级到最新版本。
答案 1 :(得分:1)
Gem只是一个用Ruby编写的插件库。
当然,Ruby正在开发中,新功能正在出现,旧功能正在消失。
最佳做法是在.gemspec
文件中指定Ruby版本。例如,like this one。
但是,如果没有,则必须手动检查性能。因此,您可以阅读gem的源代码或尝试使用gem进行检查。
对于自动化,当然最好使用测试。
答案 2 :(得分:1)
Starting at Ruby 2.1.0的版本政策是MINOR
版本的更改可能会导致API重大更改。
如果任何宝石巧合使用更改的API,都会出现不兼容的情况。
MINOR
的版本号在2.3.*
和2.5.*
之间进行了两次更改,因此即使根据文档API编写了gem,也无法保证 / strong>,除非gem的维护者花大力气测试gem(并在必要时进行升级),否则它将继续有效。自动化测试套件有很大帮助。
实际测试依据的文档版本兼容性的标准方法是by providing required_ruby_version
in .gemspec
files。
有趣的是,如果某个特定的gem确实写得不好,我想它在兼容的Ruby版本之间可能会收支平衡。这不是我在Ruby生态系统中遇到的东西,但是我在made a similar mistake writing Java code(并且Java以其向后兼容性而闻名)中,我自己的代码不小心使用了不属于API的类。有很多宝石。谁知道那里有什么? :)