Erlang/OTP 26

這個 Erlang/OTP 版本可以從原始碼建置,或者使用為您的作業系統提供的預先建置的套件,或是第三方工具(例如kerlasdf)安裝。

Erlang/OTP 26 重點部落格文章

docker run -it erlang:26

重點

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/1maps:next/1 傳回的順序。新的順序是不可預測的,並且可能在 Erlang VM 的不同呼叫之間變更。

  • 引入新函數 maps:iterator/2 以建立迭代器,該迭代器以確定的順序傳回映射元素。io:format() 中的格式字串也有新的修飾符 kK,以支援印出排序的映射元素。

Dialyzer

  • 新增了EEP 61中引入的新內建類型 dynamic()引入 EEP 61 的 PR改善了對漸進式類型檢查器的支援。

  • Dialyzer 有一個新的增量模式,可以在執行 Dialyzer 時給定 --incremental 選項來呼叫。這個新的增量模式很可能在未來的版本中成為預設值。

其他 ERTS、Stdlib、Kernel、編譯器

  • 多個時間扭曲模式現在預設為啟用。這假設在系統上執行的所有程式碼都是時間扭曲安全的。

  • 支援 NIF 介面中的 UTF-8 原子和字串,包括新函數 enif_make_new_atomenif_make_new_atom_lenenif_get_string_length

  • 現在允許在保護和比對規格中使用 BIF min/2max/2

  • 改進了選擇性接收優化,現在可以為從其他函數傳回的參考啟用此優化。這大大提高了 gen_server:send_request/3gen_server:wait_response/2 和類似函數的效能。

  • 新的追蹤功能 call_memory。與 call_time 追蹤類似,但不是測量追蹤函數中累積的時間,而是測量追蹤函數消耗的累積堆空間。它可用於比較不同函數在觸發垃圾收集方面所做的貢獻。

  • 不再需要在執行階段系統中啟用功能才能載入使用該功能的模組。在編譯時在編譯器中啟用該功能就足夠了。

  • inet:setopts/2 有 3 個新選項:reuseportreuseport_lbexclusiveaddruse

  • 修正了當使用 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 選項的錯誤檢查和處理。
  • 透過降低最大交握大小來減輕大型憑證鏈造成的記憶體使用量。這不應影響常見情況,如果需要,可以將其設定為更高的值。

  • 由於安全原因,SHA1DSA 演算法不再是預設值。

  • 新增 use_srtp hello 延伸的編碼和解碼,以便 DTLS 使用者實作 SRTP 功能。

非常感謝所有貢獻者!