OTP 25 第二個候選版本
OTP 25-rc2 #
Erlang/OTP 25-rc2 是 OTP 25.0 正式發布前的三個候選版本中的第二個。
此版本旨在收集用戶的回饋意見。我們歡迎所有回饋,即使只是告知您它對您有效。我們鼓勵用戶試用並提供回饋,您可以透過以下方式:在此處建立問題 https://github.com/erlang/otp/issues 或發布到 Erlangforums 或寄到郵件列表 erlang-questions@erlang.org。
此版本的所有成品都可從 Erlang/OTP Github 發行版下載,您可以在 https://erlang.dev.org.tw/documentation/doc-13.0-rc2/doc/ 檢視新的文件。您也可以使用 kerl 安裝最新的版本,如下所示:kerl build 25.0-rc2 25.0-rc2
。
Erlang/OTP 25 是一個新的主要版本,具有新功能、改進以及一些不相容性。以下重點介紹一些新功能。
非常感謝所有貢獻者!
以下是此版本的一些重點
rc2 重點 #
stdlib #
- 新函式
filelib:ensure_path/1
將確保給定路徑的所有目錄都存在 maps
模組中的新函式groups_from_list/2
和groups_from_list/3
- lists 模組中的新函式
uniq/1
uniq/2
compiler、kernel、stdlib、syntax_tools #
- 新增了對
EEP-60
中描述的可選功能的支援。可以使用選項(普通和 +term)在編譯期間啟用/停用功能,給erlc
以及檔案中的指令。類似的選項可以用於erl
,以啟用/停用執行時允許的功能。新的maybe
表達式EEP-49
作為 maybe_expr 功能完全支援。
rc1 重點 #
erts & jit #
- JIT 現在適用於 64 位 ARM 處理器。
- JIT 現在根據 BEAM 檔案中的類型資訊執行基於類型的最佳化。
- 改進了 JIT 對
perf
和gdb
等外部工具的支援,使其能夠顯示行號,甚至在找到時顯示原始 Erlang 原始碼。
erts、stdlib、kernel #
-
使用者現在可以使用
{write_concurrency, auto}
選項配置 ETS 表格。此選項會強制表格根據偵測到的並發程度自動變更執行時使用的鎖定數量。當{write_concurrency, auto}
啟用時,預設會啟用{decentralized_counters, true}
選項。此選項與其他 ETS 最佳化選項的比較基準測試結果可在此處取得:基準測試。
- 為了啟用更多最佳化,使用 OTP 21 和更早版本編譯的 BEAM 檔案無法在 OTP 25 中載入。
- 具有程序旗標
message_queue_data=off_heap
的程序的訊號佇列已最佳化,允許從多個程序並行接收訊號。當許多程序並行傳送至一個程序時,這可以提高效能。請參閱基準測試。 - 如果安裝的 RELEASES 檔案中的路徑是相對於安裝根目錄的路徑,則 Erlang 安裝目錄現在可以在檔案系統上重新定位。
- 已在函式
erlang:float_to_list/2
和erlang:float_to_binary/2
中新增一個名為short
的新選項。此選項會建立給定浮點數的最短正確捨入字串表示形式,該表示形式可以再次轉換回相同的浮點數。 - 在
uri_string
模組中引入quote/1
和unquote/1
函式,以取代已棄用的函式http_uri:encode
和http_uri:decode
。 - 新的模組
peer
取代slave
模組。slave
模組現在已棄用,將在 OTP 27 中移除。 -
global
現在預設會防止因網路問題而導致分割區重疊。這是透過主動與報告已失去與其他節點連線的節點中斷連線來完成的。這將導致形成完全連線的分割區,而不是讓網路處於分割區重疊的狀態。可以將
kernel
設定參數prevent_overlapping_partitions
設定為false
來關閉新的行為。這樣做將保留與 OTP 24 及更早版本相同的行為。 -
gen_server
、gen_statem
和gen_event
的format_status/2
回呼已棄用,而改用新的format_status/1
回呼。新的回呼增加了限制和變更更多內容的可能性,而不僅僅是狀態。
timer
模組已現代化並提高了效率,這使得計時器伺服器不太容易過載。timer:sleep/1
函式現在接受任意大的整數。
編譯器 #
-
已實作
EEP-49
中建議的maybe ... end
建構。它可以簡化複雜的程式碼,否則必須使用深度巢狀案例。若要啟用
maybe
,請將選項{enable_feature,maybe_expr}
給編譯器。確切要使用的選項將在即將發布的候選版本中變更,屆時也可以從正在編譯的模組內部使用。 - 當記錄比對或記錄更新失敗時,過去會引發
{badrecord, ExpectedRecordTag}
例外狀況。在此版本中,例外狀況已變更為{badrecord, ActualValue}
,其中ActualValue
是找到的值,而不是預期的記錄。 - 新增編譯屬性
-nifs()
,以使用關於哪些函式可能會被erlang:load_nif/2
覆寫為 NIF 的資訊來強化編譯器和載入器。 - 當使用二進位語法建構二進位失敗時,改進並提供更詳細的錯誤訊息。這適用於 shell 中的錯誤訊息以及
erl_error:format_exception/3,4
。
Crypto #
- 新增
crypto:hash_equals/2
,這是一個常數時間的雜湊值比較。
Dialyzer #
- 最佳化
erl_types
模組中的操作。平行化 Dialyzer 通過遠端。 - 新增了
missing_return
和extra_return
選項,以便在規格與推斷類型不同時引發警告。這些與 overspecs 和 underspecs 類似,但不像它們那樣詳細。 - Dialyzer 現在可以更好地理解
min/2
、max/2
和erlang:raise/3
的類型。因此,Dialyzer 可能會產生新的警告。特別是,使用erlang:raise/3
的函式現在可能需要一個具有no_return()
回傳類型的規格,以避免不必要的警告。
雜項 #
- 新增了一個新的 開發指南 HOWTO,其中描述了在修正錯誤或開發新功能時如何建置和測試 Erlang/OTP。
- 已將測試新增至每個開啟的 PR 的 Github 動作執行中,以便在提出錯誤修正和新功能時盡早捕獲更多錯誤。
如需有關新功能和潛在不相容性的更多詳細資訊,請參閱