【问题标题】:How do version numbers work for MRI Ruby?MRI Ruby 的版本号如何工作?
【发布时间】:2013-07-17 23:16:27
【问题描述】:

最近的一个问题“What happened with Ruby 1.9.2?”让我想知道 MRI Ruby 均值的版本号。

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

版本控制在 MRI Ruby 中是如何工作的,ruby 1.9.3p448 中的 major (1)、minor (9)、teeny (3) 和 patchlevel (448) 值是什么意思?比如增加patchlevel允许什么样的变化,增加teeny允许什么样的变化?

【问题讨论】:

标签: ruby versioning


【解决方案1】:

(这里的术语与经典的 semver.org 不同,其中 2.0.0 由 MAJOR.MINOR.PATCH 组成:如 version.htest_gem.rb 所示,ruby 方案更接近 V2.0.0pxxx,如 @ 987654331@)

以前,带有奇数次要版本号的 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)添加新功能

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

【讨论】:

  • 据我了解你的回答,在当前系统下是这样的:Ruby的MAJOR.MINOR复合体对应语义MAJOR,Ruby的TEENY对应语义MINOR,Ruby的PATCHLEVEL对应语义TEENY,还有Ruby 的 MAJOR 和 MINOR 的角色没有明确的区别。我说的对吗?
  • @sawa 我认为 ruby​​ MAJOR 用于明确的语言更改,而不是 Ruby.MINOR,后者只会添加语义更改而不必破坏向后兼容性。 Ruby TEENY 是 semver PATCH,而 Ruby PATCHLEVEL 是 semver 内部版本号。
【解决方案2】:

从 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)

【讨论】:

  • 我同意它是“准语义”的说明 - 您需要检查 MAJOR.MINOR 的 API/ABI 兼容性,而不仅仅是 MAJOR。
猜你喜欢
  • 1970-01-01
  • 2015-11-18
  • 2010-10-13
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
相关资源
最近更新 更多