Erlang/OTP 20

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

docker run -it erlang:20

潛在的不相容性

  • ERTS
    • 非 SMP Erlang VM 已被棄用,預設不再建置
    • 移除已棄用的 erlang:hash/2
    • erlang:statistics/1 的 scheduler_wall_time 現在也包含關於 dirty CPU schedulers 的資訊。
    • OTP 19.1 中引入的新清除策略是強制性的,對於持有 fun 的進程來說稍微不相容,請參閱 erlang:check_process_code/3
    • 不再支援 NIF 函式庫重新載入。
    • 原子(Atoms)現在可以包含任意 Unicode 字元,這表示如果 OTP 20 節點要接受與另一個節點或函式庫的連線,則必須支援分發協定中的 DFLAG_UTF8_ATOMS 功能。使用分發協定的第三方函式庫需要更新此功能。
  • Asn1:已移除已棄用的模組和函數(asn1rtasn1ct:encode/3decode/3
  • Ssh:在啟動守護進程的呼叫中,僅客戶端選項現在會失敗

重點

Erts

  • 在支援 SMP 的 VM 上啟用並支援 Dirty schedulers。
  • 支援 “dirty” BIF 和 “dirty” GC。
  • erlang:garbage_collect/2 用於控制次要或主要 GC
  • 發送訊息時不再複製 Erlang 字面值。
  • 改善了大型 ETS 表格的效能, >256 個項目(ordered_set 除外)
  • erlang:system_info/1 atom_count 和 atom_limit
  • 透過在 GC 期間將子二元值轉換為堆積二元值來減少記憶體壓力
  • enif_select,將外部事件對應到訊息
  • 改進了 VM 內部的計時器,從而減少了記憶體消耗並提高了計時器的管理效率
  • 新增執行階段切換鎖定計數的功能 (20.1)
  • 新增用於管理 I/O 佇列的新 nif API 函數。(20.1)
  • 編譯器

  • 改進了複雜 guard 的程式碼生成。
  • 重複相同 map 鍵的警告。#{'a'=>1, 'b'=>2, 'a'=>3} 將會警告重複的鍵 a
  • 預設情況下,使用 export_all 時會發出警告。可以停用
  • 最佳化 map 的模式匹配
  • 新選項 deterministic 可省略 BEAM 檔案中來源路徑 + 選項資訊。
  • 原子現在可以包含任意 Unicode 字元。
  • compile:file/2 有一個選項可以在 BEAM 檔案中包含額外的區塊。

其他雜項應用程式

  • 顯著更新了 string 模組,支援 Unicode 和許多新函數
  • crypto 現在支援 OpenSSL 1.1
  • 最佳化未命名的 ets 表格
  • gen_fsm 已被棄用,並由 gen_statem 取代
  • 一個新的事件管理器,用於處理 Erlang 中一部分的 OS 信號
  • 最佳化 sets 的 add_element、del_element 和 union
  • 新增 rand:jump/0-1
  • gen_server 當機時,將會列印用戶端的堆疊追蹤,以方便偵錯。
  • take/2 已新增至 dictorddictgb_trees
  • take_any/2 已新增至 gb_trees
  • erl_tar 支援長路徑名稱和新的檔案格式
  • asn1:新的 maps 選項將 SEQUENCE 的表示法變更為 map 而不是 record
  • TLS 用戶端預設會呼叫 public_key:pkix_verify_hostname/2 來驗證主機名稱
  • ssl:DTLS 已在 API 中記錄,為實驗性功能
  • ssh:改善安全性,移除和新增演算法
  • 新的 math:fmod/2
  • 擴充了 crypto API,可使用儲存在 Engine 中的私鑰/公鑰進行簽名/驗證或加密/解密操作。(20.2)