重點
Parsetools
Leex
已擴展,支援可選的欄位編號。
Stdlib
- 模組
lists
中的列舉函數系列已擴展,新增enumerate/3
,允許提供步進值。 - 將 Unicode 更新至 15.0.0 版。
- 當啟動的程序失敗時,
proc_lib:start*/*
已變為同步。這要求失敗的程序使用新的函數proc_lib:init_fail/2,3
或終止,以表示失敗。所有 OTP 行為都已修正以執行此操作。
Shell
Erlang shell 中有許多新功能和改進
- 自動完成變數、記錄名稱、記錄欄位名稱、映射鍵、函數參數類型和檔案名稱。
- 在 shell 中開啟外部編輯器以編輯目前的表達式。
- 在 shell 中定義記錄(帶類型)、函數、規格和類型。
新的終端機
- TTY/終端機子系統已重寫。Windows 使用者會注意到
erl.exe
具有與一般 Unix shell 相同的功能,並且werl.exe
只是erl.exe
的符號連結。這使得 Windows Erlang 終端機體驗與 Unix 相同。
編譯器和 JIT 優化
-
已優化具有固定大小片段的二進位檔的建立和比對。
-
已優化 UTF-8 片段的建立和比對。
-
已優化附加到二進位檔的操作。
-
編譯器和 JIT 現在為建立所有鍵在編譯時已知的文字的小型映射產生更好的程式碼。
-
由於上述的優化,
base64
模組的效能已顯著提高。例如,在具有 JIT 的 x86_64 系統上,編碼和解碼速度都比 Erlang/OTP 25 快將近三倍。
映射
-
現在已實作EEP 58中建議的映射推導。
-
透過變更原子鍵的內部排序順序,優化了一些映射操作。這變更了小型映射中原子鍵的(未記載)印出順序以及
maps:to_list/1
和maps:next/1
傳回的順序。新的順序是不可預測的,並且可能在 Erlang VM 的不同呼叫之間變更。 -
引入新函數
maps:iterator/2
以建立迭代器,該迭代器以確定的順序傳回映射元素。io:format()
中的格式字串也有新的修飾符k
和K
,以支援印出排序的映射元素。
Dialyzer
-
新增了EEP 61中引入的新內建類型
dynamic()
,引入 EEP 61 的 PR改善了對漸進式類型檢查器的支援。 -
Dialyzer 有一個新的增量模式,可以在執行 Dialyzer 時給定
--incremental
選項來呼叫。這個新的增量模式很可能在未來的版本中成為預設值。
其他 ERTS、Stdlib、Kernel、編譯器
-
支援 NIF 介面中的 UTF-8 原子和字串,包括新函數
enif_make_new_atom
、enif_make_new_atom_len
和enif_get_string_length
。 -
現在允許在保護和比對規格中使用 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 之前版本中定義的匿名測試密碼套件。 - 已將 Kernel TLS (kTLS) 的支援新增至 SSL 應用程式,用於 TLS 分配(
-proto_dist
inet_tls
),SSL 選項{ktls, true}
。 - 改進了 SSL 選項的錯誤檢查和處理。
-
透過降低最大交握大小來減輕大型憑證鏈造成的記憶體使用量。這不應影響常見情況,如果需要,可以將其設定為更高的值。
-
由於安全原因,
SHA1
和DSA
演算法不再是預設值。 - 新增
use_srtp
hello 延伸的編碼和解碼,以便DTLS
使用者實作SRTP
功能。
非常感謝所有貢獻者!