版本号如何适用于MRI Ruby?

最近的一个问题,“ Ruby 1.9.2发生了什么? ”让我对MRI Ruby的版本号感到疑惑。

MRI Ruby使用的方案与semver.org的方案不同。

版本控制如何在MRI Ruby中工作,主要(1),次要(9),少数(3)和ruby 1.9.3p448 (448)值在ruby 1.9.3p448意味着什么? 例如,补丁级别的增加允许进行哪些更改,以及在少量增加时允许哪种更改?

从Ruby 2.1.0开始,它们已经改为准语义版本。 有关详细信息,请参阅https://www.ruby-lang.org/en/news/2013/12/21/semantic-versioning-after-2-1-0/ ,但版本号现在具有以下含义:

 MAJOR: increased when incompatible change which can't be released in MINOR Reserved for special events MINOR: increased every christmas, may be API incompatible TEENY: security or bug fix which maintains API compatibility May be increased more than 10 (such as 2.1.11), and will be released every 2-3 months. PATCH: number of commits since last MINOR release (will be reset at 0 when releasing MINOR) 

(这里的术语与经典的semver.org不同,其中2.0.0由MAJOR.MINOR.PATCH组成:ruby方案,如version.htest_gem.rb ,更多是V2.0.0pxxx,与MAJOR.MINOR.TEENY.PATCHLEVEL

  • 如Ruby2.0.0更改日志所示,Major似乎保留用于语言更改。
  • 从1.9版本 (2007年12月)的文章来看,未成年人的意义与今天不同:

以前,具有奇数次要版本号的Ruby的版本号表示实验版本。 所以Ruby 1.7是实验性的,而Ruby 1.8是一个生产版本。
Ruby核心团队改变了这一点,因此随着Ruby 1.9.0的出现,Ruby 1.9不再被认为是实验性的,尽管可能需要一段时间才能实现生产使用

今天,次要版本包含语义差异

另一方面,Ruby 1.9并不完全向后兼容Ruby 1.8。 一些语义已经改变。 例如,块参数现在是块的本地,并且块语义有细微的变化。这些变化意味着许多现有的Ruby程序需要一些转换才能利用Ruby 1.9。

  • teeny(如1.9.2 )增加了新function

  • patchlevel更多关于内部版本号,添加内部修复,安全修复,将ruby版本提升到“生产级别”(就像1.9.2-p290的情况一样 )