2013-04-18 108 views
2

我很好奇紅寶石和ror版本是以什麼名字命名的。例如,在Ruby 1.9.3之後,它的版本是2.0而不是1.10或1.9.4,所以在rails中。必須有一些約定或規則。紅寶石和紅寶石在什麼基礎上的版本被命名爲

+0

至於Ruby,版本控制策略在一段時間內改變了幾次。授予討論[這裏](https://bugs.ruby-lang.org/issues/7252)。 – sawa

回答

5

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社區已經使用了術語「Ruby 2.0」超過10年來用特定的,經常談論的標記特定的「神話」版本像範圍內的猴子修補和特徵。這些功能釋放版本而沒有這些功能,但仍稱爲「2.0」應該是更多混淆比打破語義版本的規則。 (實際上,紅寶石2.0 無性狀和it has led to confusion發佈!)

OTOH,就不可能把它稱爲「1.10」,因爲RUBY_VERSION報酬不變的版本爲String,和大量的工具(錯誤地)這樣做

if RUBY_VERSION <= '1.8' 
    def foo 
    end 
end 

這將打破,因爲String'1.10'實際上是String'1.8'少。

因此,它決定在1.9。

+0

我同意Rails,但Ruby並沒有遵循semver。在1.8.6之後,1.8.7引入了許多新功能; 1.9.0和1.9.1基本上是beta版本; 1.9.2向後與1.9.0和1.9.1不兼容; 2.0大多向後兼容1.9.2,但不是1.9.1和1.9.0等。與semver相反,當修正錯誤而不是遞增第三位時,會發布新的修補程序級別版本(例如,1.9.2- P392)。 – molf

1

我認爲Ruby和Rails跟隨或多或少semantic versioning,大致意思是如果版本X.Y.Z,你改變z。如果你剛剛修復的bug。如果你添加了一些東西(因此所有程序都依賴於它,可以說我至少需要X.Y版本),並且如果引入向後不兼容性,則更改X. X,Y和Z通常被稱爲Major,Minor和revision。