查看源代码 版本

OTP 版本

自 OTP 版本 17 起,OTP 发布号对应于 OTP 版本的主要部分。OTP 版本作为一个概念在 OTP 17 中引入。使用的版本方案在版本方案中详细描述。

特定版本的 OTP 是一组特定版本的应用程序。由 OTP 版本标识的应用程序版本对应于 Erlang/OTP 团队在 Ericsson AB 一起测试过的应用程序版本。然而,可以将来自不同 OTP 版本的应用程序组合成一个 OTP 系统。Erlang/OTP 团队尚未测试过这种应用程序版本的组合。因此,始终首选使用来自单个 OTP 版本的 OTP 应用程序

候选版本具有 -rc<N> 后缀。后缀 -rc0 在开发过程中使用,直到第一个候选版本。

检索当前 OTP 版本

在 OTP 源代码树中,可以从文本文件 <OTP 源代码根目录>/OTP_VERSION 读取 OTP 版本。可以通过调用 filename:join([code:root_dir(), "OTP_VERSION"]) 来构造文件的绝对路径。

在已安装的 OTP 开发系统中,可以从文本文件 <OTP 安装根目录>/releases/<OTP 发布号>/OTP_VERSION 读取 OTP 版本。可以通过调用 filename:join([code:root_dir(), "releases",erlang:system_info(otp_release), "OTP_VERSION"]) 来构造文件的绝对路径。

如果从开发系统中的 OTP_VERSION 文件读取的版本具有 ** 后缀,则表示该系统已使用 otp_patch_apply 工具进行了修补。在这种情况下,系统由来自多个 OTP 版本的应用程序版本组成。 ** 后缀之前的版本对应于已修补的基础系统的 OTP 版本。请注意,如果开发系统通过 otp_patch_apply 以外的其他方式更新,则 OTP_VERSION 文件可能会标识错误的 OTP 版本。

在 OTP 工具创建的目标系统中,不会放置 OTP_VERSION 文件,因为可以很容易地创建一个甚至难以确定基本 OTP 版本的目标系统。但是,如果知道 OTP 版本,则允许在那里放置此类文件。

OTP 版本表

文本文件 <OTP 源代码根目录>/otp_versions.table 是源代码的一部分,其中包含从 OTP 17.0 到当前 OTP 版本的所有 OTP 版本的信息。每行包含有关特定 OTP 版本中应用程序版本的信息,并具有以下格式

<OtpVersion> : <ChangedAppVersions> # <UnchangedAppVersions> :

<OtpVersion> 的格式为 OTP-<VSN>,即与用于标识源代码的 git 标签相同。

<ChangedAppVersions><UnchangedAppVersions> 是以空格分隔的应用程序版本列表,格式为 <application>-<vsn>

  • <ChangedAppVersions> 对应于此 OTP 版本中具有新版本号的已更改应用程序。
  • <UnchangedAppVersions> 对应于此 OTP 版本中未更改的应用程序版本。

两者都可以为空,但不能同时为空。如果 <ChangedAppVersions> 为空,则表示没有进行任何更改来改变任何应用程序的构建结果。例如,这可能是对构建系统的纯粹错误修复。行的顺序未定义。此文件中的所有空白字符都是空格(字符 32)或换行符(字符 10)。

通过使用 sedgrep 等普通 UNIX 工具,可以轻松找到各种问题的答案,例如

  • 哪些 OTP 版本是 kernel-3.0 的一部分?

    $ grep ' kernel-3\.0 ' otp_versions.table

  • kernel-3.0 在哪个 OTP 版本中引入?

    $ sed 's/#.*//;/ kernel-3\.0 /!d' otp_versions.table

以上命令提供的不仅仅是确切的答案,而是在手动搜索这些问题的答案时足够的信息。

应用程序版本

自 OTP 17.0 起,应用程序版本使用与 OTP 版本相同的版本方案,但应用程序版本从不包括 -rc<N> 后缀。另请注意,应用程序版本的主要增量不一定意味着 OTP 版本的主要增量。这取决于应用程序中的主要更改是否被视为整个 OTP 的主要更改。

版本方案

更改

版本方案自 OTP 17.0 起已更改。本节末尾包含OTP 17.0 中使用的应用程序版本列表

通常,版本构造为 <Major>.<Minor>.<Patch>,其中 <Major> 是最重要的部分。但是,可能存在具有三个以上以点分隔的部分的版本。

以点分隔的部分由非负整数组成。如果所有小于 <Minor> 的部分等于 0,则省略它们。三个正常部分 <Major>.<Minor>.<Patch> 的更改如下

  • <Major> - 在进行重大更改(包括不兼容性)时增加。
  • <Minor> - 在添加新功能时增加。
  • <Patch> - 在进行纯粹的错误修复时增加。

当版本号中的一部分增加时,所有较小的部分都设置为 0

应用程序版本或 OTP 版本标识源代码版本。也就是说,它不暗示应用程序或 OTP 是如何构建的。

版本顺序

通常,版本号只是部分排序。但是,自 OTP 17.0 起,正常的版本号(包含三个部分)具有总或线性顺序。这适用于正常的 OTP 版本和正常的应用程序版本。

当比较两个具有定义顺序的版本号时,从最重要的部分开始,向较小的部分移动,比较每个部分作为标准整数。顺序由第一个不同的相同重要性的部分确定。较大的 OTP 版本包含较小 OTP 版本中存在的所有更改。相同的原则适用于应用程序版本。

版本可以包含三个以上的部分,从而导致部分排序。只有在从另一个分支分支出来时才使用此类版本。当向版本号添加一个额外的部分(除了正常的三个部分之外)时,会创建新的版本分支。新分支相对于基本版本具有线性顺序。但是,不同分支上的版本没有顺序,因此只能得出结论,它们都包含其最近公共祖先中包含的内容。当从同一基本版本多次分支时,在基本版本和最小的 1 部分之间添加 0 部分,直到找到唯一的版本。可以按照上一段中的描述比较具有顺序的版本。

分支版本的示例:版本 6.0.2.1 是从基本版本 6.0.2 分支出来的版本。形式为 6.0.2.<X> 的版本可以与小于或等于 6.0.2 的正常版本以及形式为 6.0.2.<X> 的其他版本进行比较。版本 6.0.2.1 将包括 6.0.2 中的所有更改。但是,6.0.3 很可能 包括 6.0.2.1 中的所有更改(请注意,这些版本没有顺序)。从基本版本 6.0.2 分支的第二个分支版本将是版本 6.0.2.0.1,第三个分支版本将是 6.0.2.0.0.1

发布和补丁

当发布新的 OTP 版本时,它的 OTP 版本将采用 <Major>.0 的形式,其中主要的 OTP 版本号等于发布号。主要版本号比上一个主要版本增加一步。所有其他具有相同主要 OTP 版本号的 OTP 版本都是对该 OTP 版本的补丁。

补丁以维护补丁包或紧急补丁包的形式发布。唯一的区别在于,维护补丁包是计划好的,并且通常比紧急补丁包包含更多更改。紧急补丁包是在发现一个或多个特定问题时发布的,以解决这些问题。

维护补丁包的发布通常意味着 OTP <Minor> 版本的增加,而紧急补丁包的发布通常意味着 OTP <Patch> 版本的增加。但是,情况并非总是如此,因为 OTP 版本中的更改取决于实际的代码修改,而不是补丁是否已计划。有关更多信息,请参见版本方案

OTP 版本树

所有已发布的 OTP 版本都可以在OTP 版本树中找到,该版本树会在我们发布新的 OTP 版本时自动更新。请注意,每个版本号都明确地确定其在版本树中的位置。构建树所需的只是版本号本身。

树的根是 OTP 版本 17.0,这是我们引入新的版本方案的时间。绿色版本是在主干上发布的正常版本。旧的OTP 版本将在从主干分支出来的 maint 分支上维护一段时间。当下一个 OTP 版本引入主干时,旧的 maint 分支始终从主干分支出来。这些旧 maint 分支上的版本标记为蓝色。

除了绿色和蓝色版本之外,还有灰色版本。这些表示在分支上建立的版本,目的是为特定客户解决基于特定基本版本的特定问题。带有灰色版本的分支通常会很快成为死胡同,如果不是立即的话。

OTP 17.0 应用程序版本

以下列表详细说明了 OTP 17.0 中包含的应用程序版本。

如果应用程序版本号的正常部分小于列表中相应的应用程序版本号,则该版本号不符合 OTP 17.0 中引入的版本控制方案。因此,它不被视为与 OTP 17.0 及更高版本中使用的版本存在顺序关系。

  • asn1-3.0
  • common_test-1.8
  • compiler-5.0
  • cosEvent-2.1.15
  • cosEventDomain-1.1.14
  • cosFileTransfer-1.1.16
  • cosNotification-1.1.21
  • cosProperty-1.1.17
  • cosTime-1.1.14
  • cosTransactions-1.2.14
  • crypto-3.3
  • debugger-4.0
  • dialyzer-2.7
  • diameter-1.6
  • edoc-0.7.13
  • eldap-1.0.3
  • erl_docgen-0.3.5
  • erl_interface-3.7.16
  • erts-6.0
  • et-1.5
  • eunit-2.2.7
  • gs-1.5.16
  • hipe-3.10.3
  • ic-4.3.5
  • inets-5.10
  • jinterface-1.5.9
  • kernel-3.0
  • megaco-3.17.1
  • mnesia-4.12
  • observer-2.0
  • odbc-2.10.20
  • orber-3.6.27
  • os_mon-2.2.15
  • ose-1.0
  • otp_mibs-1.0.9
  • parsetools-2.0.11
  • percept-0.8.9
  • public_key-0.22
  • reltool-0.6.5
  • runtime_tools-1.8.14
  • sasl-2.4
  • snmp-4.25.1
  • ssh-3.0.1
  • ssl-5.3.4
  • stdlib-2.0
  • syntax_tools-1.6.14
  • test_server-3.7
  • tools-2.6.14
  • typer-0.9.6
  • webtool-0.8.10
  • wx-1.2
  • xmerl-1.3.7