Erlang/OTP 26.0 第三個候選版本

2023 年 4 月 12 日 · 作者:Henrik Nord

Erlang/OTP 26.0-rc3 是 OTP 26.0 正式發布前的第三個也是最後一個候選版本。此候選版本 3 修復了前兩個候選版本中發現的一些錯誤。

此版本的目的是為了獲得使用者的回饋。我們歡迎所有回饋,即使只是告知它對您有效。我們鼓勵使用者嘗試並通過以下方式提供回饋:在此處建立議題 https://github.com/erlang/otp/issues 或發布到 Erlangforums

此版本的所有產物都可以從 Erlang/OTP Github 發布頁面下載,您可以在 https://erlang.dev.org.tw/documentation/doc-14.0-rc3/doc/ 查看新文件。您也可以使用 kerl 安裝最新版本,如下所示:kerl build 26.0-rc3 26.0-rc3。

Erlang/OTP 26 是一個新的主要版本,具有新功能、改進以及一些不相容之處。以下重點介紹了一些新功能。

非常感謝所有貢獻者!

以下是此版本的一些重點

RC2 重點 #

Parsetools #

  • Leex 已擴展,支援可選的欄位編號。

Stdlib #

  • 模組 lists 中的列舉函式系列已擴展了 enumerate/3,允許提供步進值。
  • 將 Unicode 更新至 15.0.0 版本。
  • 當啟動的程序失敗時,proc_lib:start*/* 已變為同步。這要求失敗的程序使用新函式 proc_lib:init_fail/2,3 或退出,以指示失敗。所有 OTP 行為都已修正以執行此操作。

Dialyzer #

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

SSL #

  • 將客戶端預設的 verify 選項變更為 verify_peer請注意,這使得必須同時提供受信任的 CA 憑證或明確設定 verifyverify_none。這也適用於使用 TLS 1.3 之前的 TLS 版本中定義的所謂匿名測試密碼套件時。

RC1 重點 #

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 #

  • Dialyzer 有一個新的增量模式,可以通過在執行 Dialyzer 時提供 --incremental 選項來調用。這個新的增量模式很可能會在未來的版本中成為預設模式。

其他 ERTS、Stdlib、Kernel、Compiler #

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

  • 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 #

  • SSL 應用程式已新增對核心 TLS (kTLS) 的支援,適用於 TLS 分散 (-proto_dist inet_tls)、SSL 選項 {ktls, true}
  • 改進了 ssl 選項的錯誤檢查和處理。
  • 通過降低最大握手大小來減輕來自大型憑證鏈的記憶體使用量。這不應影響常見情況,如果需要,可以將其配置為更高的值。

  • 出於安全考量,SHA1DSA 演算法不再是預設值之一。

  • 新增了 use_srtp 招呼擴展的編碼和解碼,以便 DTLS 使用者可以實作 SRTP 功能。

有關新功能和潛在不相容性的更多詳細資訊,請參閱 readme