檢視原始碼 版本
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)。
通過使用像 sed
和 grep
這樣的普通 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