我很好奇 ruby 和 ror 版本的命名依据是什么。例如,在 ruby 1.9.3 之后,它的版本是 2.0 而不是 1.10 或 1.9.4,在 rails 中也是如此。必须有一些约定或规则。
2 回答
Ruby 和 Rails 与许多其他项目一样遵循Semantic Versioning。
不过,他们并不总是信守承诺。例如,Ruby 1.9 与 Ruby 1.8 向后不兼容,而 Ruby 2.0 大部分与 Ruby 1.9 兼容,所以 Ruby 1.9 应该是 Ruby 2.0,而 Ruby 2.0 应该是 Ruby 2.1。
在这种特殊情况下,有历史上的“营销”原因:“Ruby 2.0”这个词在 Ruby 社区中已经使用了 10 多年,用来标记具有特定的、经常被谈论的特性的特定“神话”版本,例如范围猴子补丁和特征。发布一个没有这些功能但仍将其称为“2.0”的版本会比违反语义版本控制规则更令人困惑。(实际上,Ruby 2.0发布时没有特征,这导致了混乱!)
OTOH,不可能将其称为“1.10”,因为RUBY_VERSION
常量将版本返回为 a String
,并且许多工具(错误地)执行类似的操作
if RUBY_VERSION <= '1.8'
def foo
end
end
这会破坏,因为String
'1.10'
实际上小于.String
'1.8'
因此,决定选择 1.9。
我认为 Ruby 和 Rails 或多或少遵循语义版本控制,大致意思是如果版本是 XYZ,则在修复错误时更改 Z。如果您添加某些内容,请更改 Y(因此所有依赖于它的程序,可以说我至少需要版本 XY),如果您引入向后不兼容,则更改 X)。X、Y 和 Z 通常称为 Major、Minor 和 revision。