Erlang/OTP 26.0 版本發佈
Erlang/OTP 26 是一個新的主要版本,具有新功能、改進以及一些不相容性。
關於新功能、錯誤修正和潛在不相容性的詳細資訊,請參閱Erlang 26.0 的 README 或 Erlang/OTP 26.0 下載頁面。
以下是此版本的一些重點:
還有一個關於重點的部落格文章。
Parsetools #
Leex
已擴展,支援可選的欄號。
Stdlib #
- 模組
lists
中的枚舉函數系列已擴展,新增了enumerate/3
,允許提供步進值。 - 更新 Unicode 至 15.0.0 版本。
- 當啟動的程序失敗時,
proc_lib:start*/*
已變成同步的。這要求失敗的程序使用新的函數proc_lib:init_fail/2,3
或退出,以指示失敗。所有 OTP 行為都已修正以執行此操作。
Shell #
Erlang Shell 中有很多新功能和改進:
- 自動完成變數、記錄名稱、記錄欄位名稱、Map 鍵、函數參數類型和檔案名稱。
- 在 Shell 中開啟外部編輯器以編輯目前的表達式。
- 在 Shell 中定義記錄(帶類型)、函數、規格和類型。
新的終端機 #
- TTY/終端機子系統已重寫。Windows 使用者會注意到
erl.exe
的功能與一般的 Unix Shell 相同,而werl.exe
只是erl.exe
的符號連結。這使得 Windows Erlang 終端機體驗與 Unix 相同。
編譯器和 JIT 優化: #
-
已優化具有固定大小區段的二進制檔案的建立和比對。
-
已優化 UTF-8 區段的建立和比對。
-
已優化附加到二進制檔案的操作。
-
編譯器和 JIT 現在為建立小型 Map 生成更好的程式碼,其中所有鍵都是編譯時已知的字面值。
-
由於上述優化,
base64
模組的效能已顯著提高。例如,在具有 JIT 的 x86_64 系統上,編碼和解碼都比 Erlang/OTP 25 快將近三倍。
Map #
-
如 EEP 58 中所建議的 Map 推導式現已實作。
-
透過變更原子鍵的內部排序順序,已優化某些 Map 操作。這變更了小型 Map 中原子鍵的列印順序以及
maps:to_list/1
和maps:next/1
返回的順序(未記載)。新順序是不可預測的,並且可能會在 Erlang VM 的不同調用之間變更。 -
引入新函數
maps:iterator/2
,用於建立以確定性順序返回 Map 元素的迭代器。io:format()
中的格式字串也新增了修飾符k
和K
,以支援按順序列印 Map 元素。
Dialyzer #
-
新增了在 EEP 61 中引入的新內建類型
dynamic()
,引入 EEP 61 的 PR,改善對漸進式類型檢查器的支援。 -
Dialyzer 有一個新的增量模式,可以透過在執行 Dialyzer 時給出
--incremental
選項來調用。這種新的增量模式很可能會在未來版本中成為預設值。
其他 ERTS、Stdlib、Kernel、Compiler #
-
在 NIF 介面中支援 UTF-8 原子和字串,包括新的函數
enif_make_new_atom
、enif_make_new_atom_len
和enif_get_string_length
。 -
現在允許在 guard 和 match specs 中使用 BIF
min/2
和max/2
。 -
改進了選擇性接收優化,現在可以針對從其他函數返回的引用啟用。這大大提高了
gen_server:send_request/3
、gen_server:wait_response/2
和類似函數的效能。 -
新的追蹤功能
call_memory
。與call_time
追蹤類似,但不是測量追蹤函數中累積的時間,而是測量追蹤函數消耗的累積堆空間。它可以用於比較不同函數對觸發垃圾收集的貢獻程度。 -
不再需要在運行時系統中啟用功能,才能載入正在使用它的模組。在編譯時在編譯器中啟用該功能就足夠了。
-
inet:setopts/2
已新增 3 個新選項:reuseport
、reuseport_lb
和exclusiveaddruse
。 -
修正當使用 JIT 時,
-fno-omit-frame-pointer
會應用於所有 Erlang VM,以便諸如perf
之類的工具可以爬取程序堆疊。 -
在
lists
模組中,zip 函數系列現在採用選項來允許處理不同長度的列表。 -
新增
zip:zip_get_crc32/2
函數以從開啟的 ZIP 歸檔檔中檢索CRC32
總和檢查碼。透過快取回呼函數來優化gen_server
。 -
Erlang DNS 解析器
inet_res
模組和輔助模組已針對 RFC6891 進行更新;以處理具有 DNSSEC OK (DO) 位元的 OPT RR。 -
引入
application:get_supervisor/1
。 -
快取 OTP 啟動程式碼路徑,以限制在模組查找期間存取的資料夾數量。可以使用
-cache_boot_path false
來停用。
SSL #
-
將用戶端預設
verify
選項變更為verify_peer
。請注意,這強制要求也必須提供信任的 CA 憑證,或明確將verify
設定為verify_none
。當使用 TLS 1.3 版本之前的 TLS 版本中定義的所謂匿名測試密碼套件時,也適用此項。 - 已將核心 TLS (kTLS) 的支援新增至 SSL 應用程式,用於 TLS 發行 (
-proto_dist
inet_tls
) 和 SSL 選項{ktls, true}
。 - 改進了 SSL 選項的錯誤檢查和處理。
-
透過降低最大交握大小來緩解大型憑證鏈的記憶體使用量。這不應影響常見情況,如果需要,可以將其設定為較高的值。
-
出於安全考量,
SHA1
和DSA
演算法不再是預設值。 - 新增編碼和解碼
use_srtp
hello 擴充功能,以方便DTLS
使用者實作SRTP
功能。
有關新功能和潛在不相容性的更多詳細資訊,請參閱readme
非常感謝所有貢獻者!
此版本和先前版本的下載連結位於此處