Erlang/OTP 27.0 第三個候選版本
OTP 27.0-rc3 #
Erlang/OTP 27.0-rc3 是 OTP 27.0 正式發布前的第三個也是最後一個候選版本。
此版本的目的是為了收集使用者的回饋。我們歡迎所有回饋,即使只是告知我們它對您來說可以正常運作。我們鼓勵使用者嘗試並提供回饋,您可以在 https://github.com/erlang/otp/issues 上建立 issue,或是在 Erlang 論壇 上發文。
此版本的所有構件都可以在 Erlang/OTP Github 發布頁面下載,您也可以在 https://erlang.dev.org.tw/documentation/doc-15.0-rc3/doc 瀏覽新的文件。您也可以使用 kerl 安裝最新版本,如下所示:
kerl build 27.0-rc3 27.0-rc3.
Erlang/OTP 27 是一個新的主要版本,包含新功能、改進,以及一些不相容之處。以下重點介紹一些新功能。
非常感謝所有貢獻者!
RC3 中的主要變更 #
- 現在,多個追蹤會話的支援已被記錄在文件中,並可以使用。
RC2 的重點 #
-
編碼和解碼都可以客製化。解碼可以採用類似 SAX 的方式進行,並處理多個文件和數據流。
新的
json
模組被 ASN.1 的jer
(JSON 編碼規則) 用於編碼和解碼 JSON。因此,不再需要提供外部 JSON 函式庫。
RC2 中其他主要變更 #
-
現有的實驗性歸檔檔案支援將在未來版本中變更。在 escript 中使用歸檔檔案的支援將保留,但在發布版本中使用歸檔檔案的支援將會受到更多限制或完全移除。
從 Erlang/OTP 27 開始,函式
code:lib_dir/2
、-code_path_choice
旗標,以及使用erl_prim_loader
讀取歸檔檔案成員的功能已被棄用。為了與未來版本的 Erlang/OTP 保持相容,需要從其歸檔檔案中檢索數據檔案的
escript
腳本,應該使用escript:extract/2
來代替erl_prim_loader
和code:lib_dir/2
。 -
編譯器查找選項的順序已變更。
當
-compile()
屬性中給定的編譯器選項與傳遞給編譯器的選項發生衝突時,-compile()
屬性中給定的選項會覆蓋傳遞給編譯器的選項,而傳遞給編譯器的選項又會覆蓋ERL_COMPILER_OPTIONS
環境變數中給定的選項。範例
如果
some_module.erl
有以下屬性-compile([nowarn_missing_spec]).
並且像這樣調用編譯器
% erlc +warn_missing_spec some_module.erl
則不會為沒有規格的函式發出警告。
-
現在,
configure
會自動啟用對 2038 年安全時間戳記的支援。預設情況下,在建構 OTP 時使用的
configure
腳本現在會嘗試啟用在 2038 年 1 月中旬之後仍然可用的時間戳記支援。這通常只在 32 位元平台上才會是一個問題。如果
configure
無法找出如何啟用此類時間戳記,它將中止並顯示錯誤訊息。如果您無論如何都想建構系統,並且知道系統在 2038 年 1 月中旬之後將無法正常運作,您可以將--disable-year2038
選項傳遞給configure
,這將允許configure
繼續執行,而無需支援 2038 年 1 月中旬之後的時間戳記。
RC1 的重點 #
文件 #
EEP-59 已實作。現在可以使用原始程式碼中的文件屬性來記錄函式、類型、回呼和模組。
整個 Erlang/OTP 文件現在都使用新的文件系統。
新的語言功能 #
-
根據 EEP 64 實作了三引號字串,允許字串包含完整段落。
-
現在,沒有插入空白字元的相鄰字串文字會產生語法錯誤,以避免與三引號字串混淆。
-
根據 EEP 66 實作了字串文字(包括普通字串和三引號字串)上的符號。例如,
~"Björn"
或~b"Björn"
現在等同於<<"Björn"/utf8>>
。
編譯器和 JIT 的改進 #
-
現在,編譯器將合併對相同記錄的連續更新。
-
編譯器和執行階段系統中已實作元組的安全破壞性更新。這允許 VM 在安全的情況下就地更新元組,從而減少複製,並減少垃圾的產生,藉此提高效能。
-
現在預設啟用
maybe
表達式,無需再啟用maybe_expr
功能。 -
JIT 中已實作原生覆蓋率支援。
cover
工具會自動使用它,以減少執行覆蓋編譯程式碼時的執行負擔。還有新的 API 可支援原生覆蓋率,而無需使用cover
工具。 -
現在,編譯器在更新記錄/映射文字時會發出警告,以捕捉常見錯誤。例如,現在編譯器會針對
#r{a=1}#r{b=2}
發出警告。
ERTS #
-
現在,
erl
命令支援-S
旗標,該旗標類似於-run
旗標,但已消除了一些粗糙的邊緣。 -
預設情況下,現在將編譯 escript 而不是解譯它們。這表示必須安裝
compiler
應用程式。 -
預設程序限制已提高到
1048576
個程序。 -
現在,
erlang:system_monitor/2
功能能夠監視系統中的長訊息佇列。 -
已移除透過將原子 (或字串) 作為
open_port()
的第一個引數傳遞,來打開連到外部資源的埠的過時且未記載的支援,此支援由 vanilla 驅動程式實作。自 OTP 26 發布以來,此功能已排定在 OTP 27 中移除。 -
已從
erlang:fun_info/1,2
中移除pid
欄位。 -
現在支援多個追蹤會話。
STDLIB #
-
已在模組
timer
中新增數個接受函式的新函式。 -
已將函式
is_equal/2
、map/2
和filtermap/2
新增至模組sets
、ordsets
和gb_sets
。 -
有新的高效
ets
遍歷函式,可確保原子性。例如,現在可以用ets:next_lookup/1
取代ets:next/2
後面接著ets:lookup/2
。 -
新的函式
ets:update_element/4
類似於ets:update_element/3
,但採用預設元組作為第四個引數,如果不存在具有該索引鍵的先前記錄,則會插入該元組。 -
binary:replace/3,4
現在支援使用函式來提供替換二進位。 -
新的函式
proc_lib:set_label/1
可用於將描述性詞彙新增至任何沒有註冊名稱的程序。此名稱將由c:i/0
和observer
等工具顯示,並且會包含在使用gen_server
、gen_statem
、gen_event
和gen_fsm
的程序產生的損毀報告中。 -
新增了從
gb_trees
和gb_sets
檢索下一個較高或較低的索引鍵/元素的函式,以及傳回從給定索引鍵/元素開始的迭代器。
common_test #
-
對
ct:capture_start/0
和ct:capture_stop/0
的呼叫現在是同步的,以確保所有輸出都已擷取。 -
如果瀏覽器偏好,預設 CSS 現在將包含基本的深色模式處理。
crypto #
- 已移除在 Erlang/OTP 25 中標記為已棄用的函式
crypto_dyn_iv_init/3
和crypto_dyn_iv_update/3
。
dialyzer #
- 已移除 Dialyzer 的
--gui
選項。
ssl #
ssl
用戶端可以協商和處理憑證狀態請求(用戶端上的 OCSP Stapling 支援)。
tools #
- 有一個新工具
tprof
,它在一個介面下結合了eprof
和cprof
的功能。它還增加了堆積分析。
xmerl #
- 作為
xmerl_xml
的替代方案,新增了一個新的匯出模組xmerl_xml_indent
,可提供現成的縮排輸出。
有關新功能和潛在不相容性的更多詳細資訊,請參閱 README。