Erlang OTP 22.0 已發布

2019 年 5 月 14 日 · 作者:Henrik Nord

OTP 22.0 #

Erlang/OTP 22 是一個新的主要版本,具有新功能和改進,以及不相容性。

若要深入了解 OTP 22 版本的重點,您可以閱讀我們的部落格:

http://blog.erlang.org/OTP-22-Highlights/

潛在的不相容性 #

  • gen_* 行為:如果伺服器啟用了透過 sys:log/2,3 記錄最後 N 條訊息,此記錄將包含在終止報告中。
  • reltool:現在可以在 reltool 版本特定配置格式的 rel 元組中包含一個新元素 Opts:{rel, Name, Vsn, RelApps, Opts}
  • erlang:list_to_pid 和類似函數建立的所有外部 pid/ports/refs 現在與來自該節點的任何其他具有相同編號的 pid/port/ref 進行相等比較。
  • 舊的傳統 erl_interface 函式庫在 OTP 22 中已被棄用,並將在 OTP 23 中移除。這不適用於 ei 函式庫。
  • VxWorks 在 OTP 22 中已被棄用,並將在 OTP 23 中移除。

新功能 #

Erts: #

  • 支援 Erlang 分散式協定將大型訊息的 payload 分割成多個片段。
  • ETS 選項 write_concurrency 現在也影響並提高了 ordered_set 表格的可擴展性。
  • length/1 BIF 過去會一次計算列表的長度,而不會產生結果,即使列表很長也是如此。現在,當使用長列表調用時,它會產生結果。
  • 引入了一個新的(仍處於實驗階段)模組 socket。它實作為 NIF,其想法是使其「盡可能接近」OS 層級的 socket 介面。
  • 新增了 NIF 函數 enif_term_type,它透過返回給定 term 的類型,幫助避免冗長的 enif_is_xyz 序列。這對於序列化 term 的 NIF(例如 JSON 編碼器)特別有用,它可以提高效能和可讀性。

編譯器:#

  • 編譯器已被重寫,以內部使用基於靜態單賦值 (SSA) 的中間表示法。新的中間表示法使得更多的最佳化成為可能。* 二進制匹配最佳化現在比以前適用於更多情況。
  • 類型最佳化現在跨本地函數調用應用,並且將比以前刪除更多冗餘類型測試。
  • 可以在原始程式檔中給出的所有編譯器選項現在都可以在 erlc 的命令行上的選項列表中給出。
  • 在 OTP 22 中,HiPE(原生程式碼編譯器)並非完全運作。原因在於 HiPE 原生程式碼編譯器不支援用於二進制匹配的新 BEAM 指令。如果以 +native 選項調用 erlc,並且使用了任何新的二進制匹配指令,編譯器將發出警告並產生沒有原生程式碼的 BEAM 檔案。

標準函式庫:#

  • Cover 現在使用 counters 模組而不是 ets 來更新計數器。新函數 cover:local_only/0 允許在受限制但更快的僅限本機模式下執行 Cover。速度的提高將根據正在進行 cover 編譯的程式碼類型而有所不同,例如,編譯器測試套件在新 Cover 的情況下執行速度快兩倍以上。
  • 透過 socket 模組提供了一個簡單的 socket API。這是一個低階 API,它取代 gen_[tcp|udp|sctp]。它的目的是最終取代 inet 驅動程式。它還提供了一個基本的 API,有助於實作 TCP、UDP 和 SCTP 以外的其他協定。已知問題是:不支援 Windows OS(目前)、小型 term 洩漏。此功能在 OTP 22 中將被歸類為實驗性。
  • SSL:現在使用新的 logger API,包括日誌級別和詳細的除錯日誌。
  • SSL:實驗性使用的 TLS 1.3 伺服器的基本支援。
  • crypto:新的 hash_info/1cipher_info/1 函數返回包含引數中雜湊或密碼相關資訊的對應。

如需更多詳細資訊,請參閱 https://erlang.dev.org.tw/download/otp_src_22.0.readme

可以在此處取得 Windows 的預建版本: https://erlang.dev.org.tw/download/otp_win32_22.0.exe https://erlang.dev.org.tw/download/otp_win64_22.0.exe

可以在此處瀏覽線上文件:https://erlang.dev.org.tw/doc/search/

Erlang/OTP 原始程式碼也可以在 GitHub 上的官方 Erlang 儲存庫中找到

https://github.com/erlang/otp

OTP-22.0

感謝您的所有貢獻!