Erlang/OTP 20.0 發布

2017年6月21日 · 作者:Kenneth Lundin

Erlang/OTP 20.0 是一個新的主要版本,包含新功能、許多(特性)改進,以及一些不相容之處。

與第二個候選版本相比,只有一些小的變更,其中一些列在下面

  • ERTS: * erlang:term_to_binary/1 將所有 atom 的編碼從 ATOM_EXT 更改為 ATOM_UTF8_EXTSMALL_ATOM_UTF8_EXT。現在已更改為僅將實際包含 Unicode 字元的 atom 使用 UTF8 標籤進行編碼,而其他 atom 則像以前一樣使用 ATOM_EXT 進行編碼。

以下是 OTP 20 中一些最重要的消息

潛在不相容性 #

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

重點 #

Erts: #

  • 在支援 SMP 的 VM 上啟用並支援 Dirty 排程器。
  • 支援「dirty」BIF 和「dirty」GC。
  • 用於控制 minor 或 major GC 的 erlang:garbage_collect/2
  • 傳送訊息時不再複製 Erlang 字面值。
  • 改進了大型 ETS 表的效能,> 256 個條目(ordered_set 除外)
  • erlang:system_info/1 atom_count 和 atom_limit
  • 在 GC 期間將子二進位檔案轉換為堆二進位檔案,從而減少記憶體壓力
  • enif_select,將外部事件映射到訊息
  • 改進 VM 內部的計時器,從而減少記憶體消耗,並提高計時器的管理效率

Compiler: #

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

其他應用程式 #

  • 大幅更新了 string 模組,包含 Unicode 支援和許多新函式
  • crypto 現在支援 OpenSSL 1.1
  • 最佳化未命名的 ets 表
  • gen_fsm 已棄用,並由 gen_statem 取代
  • 一個新的事件管理員,用於處理 Erlang 中 OS 信號的子集
  • 最佳化集合 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 的表示形式變更為映射而不是記錄
  • TLS 用戶端預設會呼叫 public_key:pkix_verify_hostname/2 來驗證主機名稱
  • ssl:API 中已記錄 DTLS,實驗性功能
  • ssh:改善安全性,移除和新增演算法
  • 新的 math:fmod/2

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

Erlang/OTP 原始碼也可以在 GitHub 上的官方 Erlang 儲存庫中找到,https://github.com/erlang/otp,標籤為 OTP-20.0

可以在這裡取得 Windows 的預建版本:https://erlang.dev.org.tw/download/otp_win32_20.0.exe https://erlang.dev.org.tw/download/otp_win64_20.0.exe

可以在這裡瀏覽線上文件:https://erlang.dev.org.tw/documentation/doc-9.0-rc2/doc/

感謝所有貢獻者。