查看源代码 版本
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)。
通过使用 sed
和 grep
等普通 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