Erlang/OTP 26.0 候選版本 1

2023 年 2 月 15 日 · 作者:Henrik Nord

OTP 26.0-rc1 #

Erlang/OTP 26.0-rc1 是 OTP 26.0 發布前的三個候選版本中的第一個。

這個版本的目的是為了獲得我們用戶的回饋。我們歡迎所有的回饋,即使只是告訴我們它對你來說運作正常。我們鼓勵使用者嘗試這個版本,並透過在 https://github.com/erlang/otp/issues 建立 issue,或是發文到 Erlangforums 給我們回饋。

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

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

非常感謝所有貢獻者!

以下是此版本的一些重點

重點 #

Shell #

Erlang shell 中有很多新功能和改進

  • 自動補完變數、record 名稱、record 欄位名稱、map 鍵、函式參數型別和檔案名稱。
  • 在 shell 中開啟外部編輯器來編輯目前的表達式。
  • 在 shell 中定義 record(帶有型別)、函式、規格和型別。

新的終端機 #

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

  • 引入新的函式 maps:iterator/2,用於建立一個迭代器,以決定性的順序傳回 map 元素。在 io:format() 中的格式字串也新增了修飾符 kK,以支援排序輸出 map 元素。

Dialyzer #

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

其他 ERTS、Stdlib、Kernel、編譯器 #

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

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

  • 現在允許在 guard 和 match spec 中使用 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 和 helper 模組已針對 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 hello 擴充功能的編碼和解碼,以方便 DTLS 使用者實作 SRTP 功能。

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