潛在的不相容性
- 所有 Corba 應用程式現在都已從 OTP 儲存庫移出
- 將建立一個新的 Corba 儲存庫 https://github.com/erlang
- 新的應用程式 ftp 和 tftp,從 inets 移出
- ssl 預設不再支援 3_DES 加密套件或 RSA 金鑰交換加密套件
- 在基本節點(
erl_interface
、jinterface
等)上使用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。