文件
EEP-59 已實作。原始碼檔案中的文件屬性現在可以用來記錄函式、類型、回呼和模組。
整個 Erlang/OTP 文件現在都使用新的文件系統。
新的語言功能
-
已按照 EEP 64 實作三引號字串,以允許字串包含完整段落。
-
沒有中間空白的相鄰字串文字現在是語法錯誤,以避免與三引號字串混淆。
-
已按照 EEP 66 實作字串文字(包括一般字串和三引號字串)上的符號。 例如,
~"Björn"
或~b"Björn"
現在等同於<<"Björn"/utf8>>
。
編譯器和 JIT 改進
-
編譯器現在會合併同一個記錄的連續更新。
-
編譯器和執行階段系統中已實作 Tuple 的安全破壞性更新。 這樣可以讓 VM 在安全的情況下就地更新 Tuple,從而透過減少複製並產生更少的垃圾來提高效能。
-
maybe
表達式現在預設為啟用,無需啟用maybe_expr
功能。 -
JIT 中已實作原生程式碼覆蓋率支援。 它將由
cover
工具自動使用,以減少執行程式碼覆蓋率編譯碼時的執行額外負擔。 也有新的 API 支援原生程式碼覆蓋率,而無需使用cover
工具。 -
編譯器現在會在更新記錄/映射文字時發出警告,以捕捉常見的錯誤。 例如,編譯器現在會針對
#r{a=1}#r{b=2}
發出警告。 -
編譯器查找選項的順序已變更。
當
-compile()
屬性中給定的編譯器選項與給編譯器的選項發生衝突時,-compile()
屬性中給定的選項會覆蓋給編譯器的選項,而編譯器的選項又會覆蓋ERL_COMPILER_OPTIONS
環境變數中給定的選項。範例
如果
some_module.erl
具有以下屬性-compile([nowarn_missing_spec]).
並且編譯器的調用方式如下
% erlc +warn_missing_spec some_module.erl
則不會對沒有任何規格的函式發出警告。
ERTS
-
erl
命令現在支援-S
旗標,它與-run
旗標類似,但已修復一些粗糙的邊緣。 -
預設情況下,現在會編譯而非解釋 escript。 這表示必須安裝
compiler
應用程式。 -
對封存檔案的現有實驗性支援將在未來的版本中變更。 在 escript 中支援封存檔的支援將保留,但對在發行版中使用封存檔的支援將變得更加有限或完全移除。
從 Erlang/OTP 27 開始,函式
code:lib_dir/2
、-code_path_choice
旗標和使用erl_prim_loader
讀取封存檔成員都已棄用。為了與未來版本的 Erlang/OTP 保持相容,需要從其封存檔中檢索資料檔案的
escript
腳本應使用escript:extract/2
而不是erl_prim_loader
和code:lib_dir/2
。 -
預設處理序限制已提高到
1048576
個處理序。 -
erlang:system_monitor/2
功能現在能夠監控系統中的長訊息佇列。 -
已移除透過將原子(或字串)作為第一個引數傳遞給
open_port()
(由 vanilla 驅動程式實作)來開啟通往外部資源的埠的過時且未記錄的支援。 此功能自 OTP 26 發行以來已排定在 OTP 27 中移除。 -
已從
erlang:fun_info/1,2
中移除pid
欄位。 -
現在支援多個追蹤工作階段。
-
configure
現在會自動啟用對 2038 年安全的年時間戳記的支援。依預設,在建置 OTP 時使用的
configure
腳本現在會嘗試啟用對 2038 年 1 月中旬之後可以使用的時間戳記的支援。 這通常只在 32 位元平台上出現問題。 如果configure
無法找出如何啟用此類時間戳記,它將中止並顯示錯誤訊息。 如果您仍然想要建置系統,但知道該系統在 2038 年 1 月中旬之後將無法正常運作,您可以將--disable-year2038
選項傳遞給configure
,這將使configure
能夠在沒有對 2038 年 1 月中旬之後的時間戳記的支援下繼續。
STDLIB
-
有一個新的模組 json 用於編碼和解碼 JSON。
編碼和解碼都可以自訂。 解碼可以採用類似 SAX 的方式完成,並處理多個文件和資料流。
jer
(JSON 編碼規則) 的 ASN.1 使用新的json
模組來編碼和解碼 JSON。 因此,不再需要提供外部 JSON 程式庫。 -
多個接受函式的函式已新增至模組
timer
。 -
函式
is_equal/2
、map/2
和filtermap/2
已新增至模組sets
、ordsets
和gb_sets
。 -
有新的高效
ets
遍歷函式,可保證原子性。 例如,現在可以使用ets:next_lookup/1
取代ets:next/2
後接ets:lookup/2
。 -
新的函式
ets:update_element/4
與ets:update_element/3
類似,但使用預設 Tuple 作為第四個引數,如果不存在具有該鍵的前一個記錄,則會插入該引數。 -
binary:replace/3,4
現在支援使用函式來提供取代二進位檔。 -
新的函式
proc_lib:set_label/1
可用於將描述性詞彙新增至任何沒有已註冊名稱的處理序。 該名稱將由c:i/0
和observer
等工具顯示,並將包含在使用gen_server
、gen_statem
、gen_event
和gen_fsm
的處理序產生的損毀報告中。 -
新增了從
gb_trees
和gb_sets
檢索下一個較高或較低鍵/元素的函式,以及傳回從給定鍵/元素開始的迭代器。
common_test
-
對
ct:capture_start/0
和ct:capture_stop/0
的呼叫現在是同步的,以確保捕獲所有輸出。 -
如果瀏覽器偏好,預設 CSS 現在將包含基本的暗模式處理。
crypto
- 已移除在 Erlang/OTP 25 中標記為已棄用的函式
crypto_dyn_iv_init/3
和crypto_dyn_iv_update/3
。
dialyzer
- 已移除 Dialyzer 的
--gui
選項。
ssl
ssl
用戶端可以協商和處理憑證狀態要求(用戶端上的 OCSP Stapling 支援)。
tools
- 有一個新的工具
tprof
,它在一個介面下結合了eprof
和cprof
的功能。 它還增加了堆積分析。
xmerl
- 作為
xmerl_xml
的替代方案,新增了一個新的匯出模組xmerl_xml_indent
,它提供了開箱即用的縮排輸出。