非常教程

Erlang 20参考手册

指南:系统原则 | Guide: System principles

5.版本 | 5. Versions

5.1 OTP版本

从OTP版本17开始,OTP版本号对应于OTP版本的主要部分。在OTP 17中引入了作为概念的OTP版本。所使用的版本方案在以下详细描述Version Scheme

特定版本的OTP是一组特定版本的应用程序。由OTP版本标识的应用程序版本与由爱立信AB的Erlang/OTP团队一起测试的应用程序版本相对应。然而,OTP系统可以与来自不同OTP版本的应用程序放在一起。Erlang/OTP团队尚未对这种应用程序版本的组合进行测试。因此,总是优选使用来自单个OTP版本的OTP应用程序

发布候选人有一个-rc<N>后缀。后缀-rc0在开发期间用于第一个候选版本。

检索当前OTP版本

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

在已安装的OTP开发系统中,可以从文本文件中读取OTP版本<OTP installation root>/releases/<OTP release number>/OTP_VERSION。文件的绝对路径可以通过调用构造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_VERSION文件被放置在target systemOTP工具创建的文件中。这是因为人们很容易就可以创建一个目标系统,甚至很难确定基本的OTP版本。但是,如果您知道OTP版本,则可以在那里放置这样的文件。

OTP版本表

文本文件<OTP source root>/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)。

通过使用普通的UNIX工具sedgrep人们可以很容易地找到各种问题的答案,如:

  • 哪些OTP版本是其中的kernel-3.0一部分? $ grep ' kernel-3\.0 ' otp_versions.table
  • 哪种OTP版本被kernel-3.0引入?

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

上述命令给出的信息比准确的答案要多一些,但手动搜索这些问题的答案时要提供足够的信息。

警告

otp_versions.table在OTP 17发布期间,该格式可能会发生变化。

5.2应用版本

从OTP 17.0应用程序版本开始,使用与version schemeOTP版本相同的版本。然而,发布候选版本的应用程序版本不会有-rc<N>后缀作为OTP版本。另请注意,应用程序版本中的主要增量并不一定意味着OTP版本的主要增量。这取决于应用程序的主要变化是否被认为是整体OTP的主要变化。

5.3版本计划

版本方案更改为OTP 17.0。这意味着在OTP 17.0之前使用的应用程序版本不符合此版本方案。A list of application versions used in OTP 17.0包含在本节的结尾处

在正常情况下,版本被构造为<Major>.<Minor>.<Patch>,其中<Major>最重要的部分在哪里。

但是,可以存在比这更多的点分离部分。点分隔的部分由非负整数组成。如果所有部分的重要性不如<Minor>平等0,则省略。三个正常部分<Major>.<Minor>.<Patch>更改如下:

  • <Major> - 在发生重大变更(包括不兼容)时增加。
  • <Minor> - 增加新功能时增加。
  • <Patch>-在修复纯bug时增加。

当版本号中的某个部分增加时,所有不重要的部分都将设置为0

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

版本顺序

一般版本号只是部分订购。但是,OTP 17.0的正常版本号(包含三部分)具有总体或线性顺序。这适用于普通OTP版本和普通应用程序版本。

当比较有订单的两个版本号时,将每个零件比较为最重要零件的普通整数或不重要零件。订单由具有不同意义的相同重要性的第一部分定义。具有较大版本的OTP版本包括属于较小OTP版本的所有更改。应用程序版本也是如此。

一般来说,版本可以有三个以上的部分。这些版本只是部分订购。这种版本仅用于特殊情况。当一个额外的部分(超出正常的三个部分)被添加到版本号中时,会创建一个新的版本分支。新分支对基本版本有一个线性顺序。但是,不同分支上的版本没有顺序,因此我们只能得出结论,它们都包含了最接近的共同祖先中包含的内容。从同一基本版本分支多次时,0会在基本版本和最不重要的1部分之间添加部分,直到找到唯一版本。具有订单的版本可以按照前面段落中的描述进行比较。

分支版本的示例:版本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

5.4 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
Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1