Erlang/OTP 27.0 版本發布

2024 年 5 月 15 日 · 作者:Björn Gustavsson

Erlang/OTP 27 是一個新的主要版本,包含新功能、改進以及一些不相容之處。

有關新功能、錯誤修復和潛在不相容性的詳細資訊,請參閱Erlang 27.0 README或 Erlang/OTP 27.0 下載頁面。

非常感謝所有貢獻者!

以下是此版本的一些重點

文件 #

EEP-59 已實作。原始碼檔案中的文件屬性現在可用於記錄函式、類型、回呼和模組。

整個 Erlang/OTP 文件現在都使用新的文件系統。

建置 Erlang/OTP #

  • configure 現在會自動啟用對 2038 年安全時間戳記的支援。

    預設情況下,建置 OTP 時使用的 configure 腳本現在會嘗試啟用對 2038 年 1 月中旬之後仍然有效時間戳記的支援。這通常只會在 32 位元平台上成為問題。

    如果 configure 無法找出如何啟用此類時間戳記,它將會中止並顯示錯誤訊息。如果您想在知道系統在 2038 年 1 月中旬之後將無法正常運作的情況下仍然建置系統,您可以將 --disable-year2038 選項傳遞給 configure,這將使 configure 能夠在沒有對 2038 年 1 月中旬之後的時間戳記的支援的情況下繼續。

新的語言功能 #

  • 已根據 EEP 64 實作三引號字串,允許一個字串包含完整段落。

  • 不包含中間空白字元的相鄰字串常值現在是一個語法錯誤,以避免可能與三引號字串混淆。

  • 已根據 EEP 66 實作字串常值(普通和三引號)上的符號。例如,~"Björn"~b"Björn" 現在等同於 <<"Björn"/utf8>>

編譯器和 JIT 改進 #

  • 編譯器現在會合併對同一記錄的連續更新。

  • 編譯器和執行時系統中已實作安全的 tuple 破壞性更新。這允許 VM 在安全的情況下原地更新 tuple,從而透過減少複製以及產生較少垃圾來提高效能。

  • maybe 表達式現在預設啟用,無需啟用 maybe_expr 功能。

  • JIT 中已實作原生覆蓋率支援。它將由 cover 工具自動使用,以減少執行 cover 編譯程式碼時的執行額外負荷。還有新的 API 可支援在不使用 cover 工具的情況下進行原生覆蓋率分析。

  • 編譯器現在會在更新記錄/map 常值時發出警告,以捕捉常見錯誤。例如,編譯器現在會針對 #r{a=1}#r{b=2} 發出警告。

ERTS #

  • erl 命令現在支援 -S 標誌,這類似於 -run 標誌,但移除了一些不順暢的地方。

  • 預設情況下,escript 現在將會被編譯而不是解譯。這表示必須安裝 compiler 應用程式。

  • 預設的程序限制已提高到 1048576 個程序。

  • erlang:system_monitor/2 功能現在能夠監控系統中的長訊息佇列。

  • 已移除已過時且未記錄的支援,該支援透過將原子(或字串)作為第一個引數傳遞給 open_port() 來開啟通往外部資源的埠,該支援由原始驅動程式實作。自 OTP 26 版本發布以來,此功能已排定在 OTP 27 中移除。

  • pid 欄位已從 erlang:fun_info/1,2 中移除。

  • 現在支援多個追蹤工作階段。

STDLIB #

  • 有一個新的模組 json,用於編碼和解碼 JSON

    編碼和解碼都可以自訂。解碼可以以類似 SAX 的方式完成,並處理多個文件和資料串流。

    新的 json 模組由 ASN.1 的 jer (JSON 編碼規則) 用於編碼和解碼 JSON。因此,不再需要提供外部 JSON 程式庫。

  • 已向模組 timer 新增幾個接受 fun 的新函式。

  • 已將函式 is_equal/2map/2filtermap/2 新增至模組 setsordsetsgb_sets

  • 有新的高效 ets 遍歷函式,具有保證的原子性。例如,ets:next/2 後接 ets:lookup/2 現在可以用 ets:next_lookup/1 取代。

  • 新的函式 ets:update_element/4 類似於 ets:update_element/3,但會將預設 tuple 作為第四個引數,如果不存在具有該鍵的前一個記錄,則會插入該 tuple。

  • binary:replace/3,4 現在支援使用 fun 來提供取代 binary。

  • 可以使用新的函式 proc_lib:set_label/1 將描述性詞彙新增至任何沒有已註冊名稱的程序。此名稱將由 c:i/0observer 等工具顯示,並將包含在使用 gen_servergen_statemgen_eventgen_fsm 的程序所產生的當機報告中。

  • 新增了從 gb_treesgb_sets 擷取下一個更高或更低鍵/元素的函式,以及傳回從給定鍵/元素開始的迭代器。

common_test #

  • ct:capture_start/0ct:capture_stop/0 的呼叫現在是同步的,以確保擷取所有輸出。

  • 如果瀏覽器偏好,預設 CSS 現在將包含基本的深色模式處理。

crypto #

  • 已移除在 Erlang/OTP 25 中標記為已棄用的函式 crypto_dyn_iv_init/3crypto_dyn_iv_update/3

dialyzer #

  • 已移除 Dialyzer 的 --gui 選項。

ssl #

  • ssl 用戶端可以協商和處理憑證狀態要求(用戶端上的 OCSP Stapling 支援)。

tools #

  • 有一個新的工具 tprof,它在一個介面下結合了 eprofcprof 的功能。它還新增了堆積分析。

xmerl #

  • 作為 xmerl_xml 的替代方案,新增了一個新的匯出模組 xmerl_xml_indent,它提供了開箱即用的縮排輸出。

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