檢視原始碼 版本

OTP 版本

自 OTP 版本 17 起,OTP 發行版本號碼對應於 OTP 版本的主要部分。OTP 版本作為一個概念是在 OTP 17 中引入的。所使用的版本方案在版本方案中有詳細描述。

特定版本的 OTP 是一組特定版本的應用程式。由 OTP 版本識別的應用程式版本對應於 Ericsson AB 的 Erlang/OTP 團隊一起測試過的應用程式版本。但是,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 工具,可以很容易地找到各種問題的答案,例如

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

    $ 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 中使用的應用程式版本列表包含在本節末尾。

通常,版本會構造成 <主要>.<次要>.<修補>,其中 <主要> 是最重要的部分。但是,可以有多個由點分隔的部分的版本。

由點分隔的部分由非負整數組成。如果所有重要性小於 <次要> 的部分都等於 0,則會省略它們。三個正常部分 <主要>.<次要>.<修補> 會按如下方式變更

  • <主要> - 當進行重大變更(包括不相容性)時增加。
  • <次要> - 當新增新功能時增加。
  • <修補> - 當進行純錯誤修復時增加。

當版本號碼中的某個部分增加時,所有重要性較小的部分都會設定為 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 版本將採用 <主要>.0 形式,其中主要 OTP 版本號碼等於發行版本號碼。自上一個主要版本以來,主要版本號碼會增加一個步驟。所有其他具有相同主要 OTP 版本號碼的 OTP 版本都是該 OTP 發行版本的修補程式。

修補程式以維護修補程式套件或緊急修補程式套件的形式發行。唯一的區別是維護修補程式套件是經過規劃的,通常包含比緊急修補程式套件更多的變更。緊急修補程式套件是在發現一個或多個特定問題時發行的,以解決這些問題。

維護修補程式套件的發行通常表示 OTP <次要> 版本的增加,而緊急修補程式套件的發行通常表示 OTP <修補> 版本的增加。但是,情況並非總是如此,因為 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