Erlang/OTP 21

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

Erlang/OTP 21 重點 部落格文章

docker run -it erlang:21

潛在的不相容性

  • 所有 Corba 應用程式現在都已從 OTP 儲存庫移出
  • 將建立一個新的 Corba 儲存庫 https://github.com/erlang
  • 新的應用程式 ftp 和 tftp,從 inets 移出
  • ssl 預設不再支援 3_DES 加密套件或 RSA 金鑰交換加密套件
  • 在基本節點(erl_interfacejinterface 等)上使用 erlang:monitor 不會再因 badarg 例外而失敗。而是會建立一個監控器,但它只會監督與節點的連線。

如需完整清單,請參閱OTP 21.0 - 潛在的不相容性

重點

Erts
  • 增強的 IO 可擴展性
  • 支援使用分散式控制器進程進行替代傳輸、路由等
  • 64 位元系統上小於 4GB 的程式碼使用緊湊指令,載入程式碼的記憶體減少 20%
  • 使用 NIF 和「Dirty schedulers」重寫 efile 驅動程式,導致更快的檔案操作,移除非 SMP VM
  • 連結和監視器針對可擴展性進行了最佳化
  • os:getenv/putenv 現在在執行緒安全模擬上運作。不再與 libc getenv(3) 同步。將需要手動同步。
  • 新的 counters 和 atomics 模組提供對可變固定字大小變數的高效操作的存取。(21.2)
  • 新的模組 persistent_term!。查詢是恆定時間!不複製術語!(21.2)
編譯器
  • 其他編譯器最佳化,包括 Elixir 團隊的貢獻,導致基準測試提高了 10%
  • 「元組呼叫」已從執行時期系統中移除。
  • 程式碼如 f({ok, Val}) -> {ok, Val} 現在會自動重寫為 f({ok, Val} = Tuple) -> Tuple。這減少了程式碼大小、執行時間,並減少了 GC 壓力。
  • 來自許多運算子的堆疊追蹤中提供更多資訊
  • erlang:get_stacktrace/0 已棄用,將被 try … catch C:R:Stacktrace -> … 取代
  • 最佳化了使用文字鍵建立小型映射。
  • 一個新的預定義巨集 OTP_RELEASE 和預處理器指令 -if-elif
安全
  • SSL 應用程式現在支援 DTLS
  • 增強了透過 TLS 進行分散式處理的支援
  • 從 SSL 和 SSH 中的預設值中移除了「不安全」的加密。
  • 定義了一個新的選項值,以方便實作執行伺服器。為了相容性而保留了舊的選項,但現在會在 stderror 上產生錯誤。
標準函式庫
  • 用於記錄的新 API,logger
  • 新的 uri_string 模組,用於根據「標準」解析 URI
  • 新函數 lists:search(list,fun/1) -> {ok, Value} | false
  • 變更了 .erlang 載入的預設行為。escript、erlc、dialyzer 和 typer 不再載入 .erlang。