檢視原始碼 STDLIB 發行說明

此文件描述了 STDLIB 應用程式的變更。

STDLIB 6.2

修正的錯誤和故障

  • 現在可以透過再次按下 ^[h 來展開按下 ^[h 時顯示的幫助文字。

    自有 ID:OTP-19260 輔助 ID:PR-8884

  • 在 Shell 中使用 fun Name/Arity 語法定義 fun 會失敗。此問題已修正,現在以下操作有效:

    1> F = fun is_atom/1.
    #Fun.erl.42.18682967>
    > F(a).
    true
    3> Id = fun id/1.
    #Fun.erl.42.18682967>
    4> Id(42).
    ** exception error: undefined shell command id/1
    5> id(I) -> I.
    ok
    6> Id(42).
    42

    除錯器也已修正,可正確處理 BIF 的此語法。

    自有 ID:OTP-19322 輔助 ID:GH-8963PR-8987

  • 修正了完成 'fun(' 時導致 Shell 當機的錯誤。

    自有 ID:OTP-19351 輔助 ID:PR-9043

  • 修正了嘗試完成以 '/' 或變數開頭,後接 '(' 或 '/' 的運算式時導致 Shell 當機的錯誤。例如 Foo/ 和 Foo(。

    自有 ID:OTP-19361 輔助 ID:PR-9078

  • zip:extract/2 搭配 keep_old_files 現在會遵守 cwd 選項。

    自有 ID:OTP-19370 輔助 ID:PR-9097GH-9087

  • 修正了 uri_string:percent_decode 規格中的錯誤

    自有 ID:OTP-19380 輔助 ID:GH-8755

改進和新功能

STDLIB 6.1.2

修正的錯誤和故障

  • 透過此變更,當 URI 對應中未提供路徑時,uri_string:normalize 會假設為空路徑(不會當機)。

    自有 ID:OTP-19266 輔助 ID:ERIERL-1127、PR-8890

  • 修正了 json:format/3 的規格。

    自有 ID:OTP-19286 輔助 ID:GH-8880PR-8914

STDLIB 6.1.1

修正的錯誤和故障

  • 移除 json:decode/3 中傳回二進位檔的空白字元移除。

    自有 ID:OTP-19227 輔助 ID:ERIERL-1130、PR-8809

  • 修正 zip:unzip/2,使其在解壓縮 Zip64 額外標頭中包含垃圾資料的 zip 檔案時不會當機。此錯誤在 Erlang 27.1 中引入,目前僅在 MS Excel 建立的某些封存檔中看到。

    自有 ID:OTP-19241 輔助 ID:PR-8836

  • 透過此變更,關閉程序會處理執行關閉的監管者與其他原因導致的子程序終止之間的競爭狀況。

    自有 ID:OTP-19256 輔助 ID:PR-8780

STDLIB 6.1

修正的錯誤和故障

  • 不正確的 io:format/0 字串的說明列印現在可以正確處理 k 修飾符。

    自有 ID:OTP-19146 輔助 ID:PR-8611GH-8568

  • 修正了當關鍵字和元組出現在同一行時導致 Shell 完成當機的錯誤。

    自有 ID:OTP-19157 輔助 ID:PR-8638

  • 由於 PR-7419/OTP-18671,callback_mode 的快取內部值開始洩漏到 logger 報告中,這可能會導致 logger 處理常式當機。現在已修正此問題,可以顯示設定的值,就像快取之前一樣。

    自有 ID:OTP-19164 輔助 ID:GH-8605PR-7419、OTP-18671

  • 修正了與壓縮 ETS 表格相關的模擬器當機問題。

    自有 ID:OTP-19176 輔助 ID:PR-8683

  • 當找不到索引鍵時,maps:update/3 的錯誤描述不再堅持第三個引數不是對應。

    自有 ID:OTP-19189

  • 已修正為 Shell 建立文件的 Markdown 剖析器中的多個問題。

    剖析器在括號內錯誤地剖析格式化的 Markdown(粗體或斜體)。這以前無法在 Shell 文件 (_Option._) 中正確顯示,而是逐字顯示。此修復會使 Option. 以斜體顯示。

    Markdown 剖析器也用於建立其他文件格式,因此這是影響其他產生文件格式的錯誤。

    自有 ID:OTP-19200 輔助 ID:GH-8738PR-8739

  • 修正了 unicode_util 中某些程式碼點範圍的類別。

    自有 ID:OTP-19210 輔助 ID:GH-8748

  • 修正了 argparse,使其在可用時列印子命令說明。

    自有 ID:OTP-19222 輔助 ID:PR-8777

改進和新功能

  • 已新增來自圍籬程式碼區塊的 HTML 類別註釋。

    自有 ID:OTP-19105 輔助 ID:PR-8499

  • 新增了縮排輸出的 JSON 格式化函式。

    自有 ID:OTP-19112

  • 改進了意外的對應關聯的非法模式錯誤。

    自有 ID:OTP-19128 輔助 ID:PR-8555

  • 動態啟動的監管者的進度報告現在將記錄在除錯層級。

    潛在不相容性

    自有 ID:OTP-19202 輔助 ID:PR-8261GH-8715PR-8741

  • zip 模組已更新,以支援

    • zip64 封存檔 - 大於 4GB 或包含超過 2^32 個條目的封存檔。
    • 延伸時間戳記 - 更高的解析度,且採用 UTC。
    • UID/GID - 儲存和解壓縮原始 UID/GID。
    • 修正,以便正確讀取和設定封存檔中檔案的權限模式屬性。
    • zip:list_dir/2 現在也會傳回目錄,而不僅僅是檔案。(您可以使用選項 skip_directories 來停用此行為)。

    原始實作中的各種錯誤也已修正,例如

    • 正確編碼和解碼封存檔中條目的 DOS 時間戳記(即非延伸時間戳記)。
    • 修正 DOS 時間戳記以設定為本機時間,而非 UTC(使用延伸時間戳記取得 UTC 時間戳記)。
    • 在建立封存檔時,使用從磁碟讀取的 Unix 檔案屬性,而不是將所有屬性設定為 644。

    自有 ID:OTP-19214 輔助 ID:PR-8765

STDLIB 6.0.1

修正的錯誤和故障

STDLIB 6.0

修正的錯誤和故障

  • binary 模組中的規格已更新,以反映文件所允許的內容。

    自有 ID:OTP-18684 輔助 ID:PR-7481

  • binary 模組中的數個函式會在某些情況下接受錯誤類型的引數。在此版本中,現在當給定不正確的類型時,它們會引發例外。

    如果主體二進位檔為空或給定 {scope,{0,0}} 選項,則下列函式會接受無效模式:binary:match/2,3binary:matches/2,3binary:replace/3,4binary:split/2,3

    呼叫 binary:copy(<<1:1>>, 0) 會傳回空的二進位檔,而不是引發例外。同樣地,嘗試在位元字串的第 0 個位置提取 0 個位元組時,呼叫 binary:part/2,3 會傳回空的二進位檔,而不是引發例外。

    自身 ID:OTP-18743 輔助 ID:PR-7607, PR-7628

  • 預處理器的文件現在提到,可以在 -if-elif 指令的條件中呼叫 defined(Name),以測試 Name 是否為已定義巨集的名稱。(此功能已在 OTP 21 中實作。)

    如果 -if-elif 中呼叫的函式名稱不是 guard BIF 的名稱,則不會產生編譯錯誤,而是會導致跳過指令後的程式碼行。現在已將此變更為編譯錯誤。

    潛在不相容性

    自身 ID:OTP-18784 輔助 ID:GH-7706, PR-7726

  • 現在,當 eof 是回呼函式傳回的最後一個項目時,使用 I/O 協定的 get_until 請求會正確傳回二進位資料或列表。

    自身 ID:OTP-18930 輔助 ID:PR-7993, GH-4992

  • 已增強 simple_one_for_one supervisor 的錯誤處理。返回 ignore 的暫時子程序將不再導致崩潰。

    此外,已停用自動關閉,因為對於此類 supervisor 沒有意義。允許這樣做被視為錯誤。因此,我們不認為這是一個不相容的變更。

    潛在不相容性

    自身 ID:OTP-19029 輔助 ID:PR-8230

  • 修正 shell 擴充功能,使其在擴充具有非 atom 鍵的 map 時不會崩潰,並且在給定引數時不會列出零元函式。

    自身 ID:OTP-19073 輔助 ID:PR-8375, GH-8366, GH-8365, GH-8364

改進和新功能

  • 函式 is_equal/2map/2filtermap/2 已新增至模組 setsordsetsgb_sets

    自身 ID:OTP-18622 輔助 ID:PR-7183, PR-7232

  • 編譯器現在會針對函式頭部不匹配發出更友善的錯誤訊息。例如,給定

    a() -> ok;
    a(_) -> error.

    Erlang/OTP 26 及更早版本會發出類似以下的診斷資訊

    t.erl:6:1: head mismatch
    %    6| a(_) -> error.
    %     | ^

    而在 Erlang/OTP 27 中,診斷資訊類似於

    t.erl:6:1: head mismatch: function a with arities 0 and 1 is regarded as two distinct functions. Is the number of arguments incorrect or is the semicolon in a/0 unwanted?
    %    6| a(_) -> error.
    %     | ^

    自身 ID:OTP-18648 輔助 ID:PR-7383

  • zip:create/2,3 現在可以容忍提供的 file_info 記錄中的 POSIX 時間戳記。

    自身 ID:OTP-18668

  • 回呼函式 gen_statem:handle_event/4 已在 gen_statem 引擎中快取,以最佳化回呼函式呼叫速度。

    自身 ID:OTP-18671 輔助 ID:PR-7419

  • 類型 beam_lib:beam/0 現在已匯出。

    自身 ID:OTP-18716 輔助 ID:PR-7534

  • 已改進 binary 模組的文件。

    自身 ID:OTP-18741 輔助 ID:PR-7585

  • binary:replace/3,4 現在支援使用 fun 來提供替換的二進位資料。

    自身 ID:OTP-18742 輔助 ID:PR-7590

  • 已根據 EEP 64 實作三引號字串。請參閱參考手冊中的 字串

    範例

    1> """
       a
       b
       c
       """.
    "a\nb\nc"

    現在,相鄰且沒有插入空白字元的字串文字是語法錯誤,以避免可能與三引號字串混淆。例如

    1> "abc""xyz".
    "xyz".
    * 1:6: adjacent string literals without intervening white space

    潛在不相容性

    自身 ID:OTP-18750 輔助 ID:OTP-18746, PR-7313, PR-7451

  • 新的函式 proc_lib:set_label/1 可用於將描述性詞彙新增至任何沒有已註冊名稱的程序。該名稱將顯示在 c:i/0observer 等工具中,並且會包含在使用 gen_servergen_statemgen_eventgen_fsm 的程序產生的當機報告中。

    可以透過呼叫 proc_lib:get_label/1 來擷取程序的標籤。

    請注意,這些函式適用於任何程序,而不僅僅是使用 proc_lib 的程序。

    範例

    1> self().
    <0.90.0>
    2> proc_lib:set_label(my_label).
    ok
    3> i().
        .
        .
        .
    <0.90.0>              erlang:apply/2                        2586    75011    0
    my_label              c:pinfo/2                               51
    4> proc_lib:get_label(self()).
    my_label

    自身 ID:OTP-18789 輔助 ID:PR-7720, PR-8003

  • 已將 -callback 屬性新增至模組 syserl_error

    自身 ID:OTP-18793 輔助 ID:PR-7703

  • 已將數個接受 fun 的新函式新增至模組 timer

    函式 apply_after/2apply_interval/2apply_repeatedly/2 接受零元 fun 作為第二個引數,而函式 apply_after/3apply_interval/3apply_repeatedly/3 接受 n 元 fun 作為第二個引數,並接受 fun 的 n 個引數列表作為第三個引數。

    自身 ID:OTP-18808 輔助 ID:PR-7649

  • 已根據 EEP 66 實作字串文字上的 Sigil,也就是說:逐字和跳脫字元變體中的二進位和字串 Sigil,以及預設 (vanilla) Sigil。全部適用於普通字串和三引號字串 (EEP 64)。請參閱參考手冊中的 Sigil

    範例

    1> ~"Björn".
    <<"Björn"/utf8>>
    2> ~b"Björn".
    <<"Björn"/utf8>>
    3> ~S"\s*(\w+)".
    "\\s*(\\w+)"
    4> ~B"\s*(\w+)".
    <<"\\s*(\\w+)">>

    自身 ID:OTP-18825 輔助 ID:OTP-18750, PR-7684

  • 已匯出函式 shell:default_multiline_prompt/1shell:inverted_space_prompt/1shell:prompt_width/1,以協助自訂提示實作。

    自身 ID:OTP-18834 輔助 ID:PR-7675, PR-7816

  • shell 現在會對來自文件說明命令 (h(Module))、自動完成和搜尋命令的長輸出進行分頁顯示。

    自身 ID:OTP-18846 輔助 ID:PR-7845

  • 現在,M-h 快捷鍵 (Alt/Option-h) 會為游標前的模組或函式輸出說明。

    自身 ID:OTP-18847 輔助 ID:PR-7846

  • 新增了對新增自訂程式碼格式化器的支援,該格式化器可以在提交時以您偏好的格式格式化您的多行 shell 命令。請參閱 shell:format_shell_func/shell:erl_pp_format_func/1

    自身 ID:OTP-18848 輔助 ID:PR-7847

  • 新增了 shell 函式,用於檢視、忘記和儲存本機定義的函式、類型和記錄。

    自身 ID:OTP-18852 輔助 ID:PR-7844

  • 新增了 string:jaro_similarity/2,可用於計算兩個字串之間的相似度。

    自身 ID:OTP-18865 輔助 ID:PR-7879

  • 新的函式 ets:update_element/4 類似於 ets:update_element/3,但採用預設元組作為第四個引數,如果不存在具有該鍵的先前記錄,則將插入該元組。

    自身 ID:OTP-18870 輔助 ID:PR-7857

  • 新增了從 gb_treesgb_sets 擷取下一個較高或較低鍵/元素的函式,以及傳回從給定鍵/元素開始的迭代器。

    自身 ID:OTP-18874 輔助 ID:PR-7745

  • 當使用 shell 內建函式 c/1,2 重新編譯模組時,原始編譯的目前工作目錄現在會新增至 include 路徑。

    自身 ID:OTP-18908 輔助 ID:PR-7957

  • timer 模組現在會使用私有表格來管理其內部狀態,從而稍微提高其效能。

    自身 ID:OTP-18914 輔助 ID:PR-7973

  • 已實作 EEP-59 - 文件屬性

    文件屬性可用於記錄函式、類型、回呼和模組。關鍵字 -moduledoc "Documentation here". 用於記錄模組,而 -doc "Documentation here". 可用於在函式、類型和回呼頂部記錄它們。

    • 類型、回呼和函式文件可以透過 -doc false-doc hidden 設定為 hidden。當文件屬性將類型標記為隱藏時,它們將不會是文件的一部分。

    • 依預設,來自 moduledocdoc 的文件會以 EEP-48 的格式新增至二進位 beam 檔案中。

    • 使用編譯器旗標 warn_missing_doc 時,如果匯出的函式、類型和回呼中缺少 -doc 屬性,則會引發警告。

    • 當已記錄的函式、類型和回呼中缺少 spec 屬性時,使用編譯器旗標 warn_missing_spec_documented 將會引發警告。

    • moduledocdoc 可以參考要嵌入的外部檔案,例如 -doc {file, "README.md"}.,它會參考目前工作目錄中的 README.md 檔案。

    • 編譯器會針對規格 (specs) 參照到隱藏類型的已匯出函式發出警告。因此,當已匯出函式中使用隱藏類型 (表示該類型不是文件的一部分) 時,將會出現警告。

    Own Id: OTP-18916 Aux Id: PR-7936

  • 新的 ets 函式 ets:first_lookup/1ets:next_lookup/2ets:prev_lookup/2ets:last_lookup/1。例如:ets:next_lookup/1 等同於先執行 ets:next/2,然後再執行 ets:lookup/2,並使用下一個鍵。新的合併函式效率更高,並保證原子性。

    Own Id: OTP-18923 Aux Id: PR-6791

  • maybe 表達式現在預設為啟用。

    若要將 maybe 作為 atom 使用,則需要用單引號括起來。或者,可以透過停用 maybe_expr 功能來停用 maybe 表達式。這可以透過在 Erlang 原始檔的開頭放置以下程式碼行來完成

    -feature(maybe_expr, disable).

    停用 maybe_expr 功能的另一種方法是將 -disable-feature 選項傳遞給 erlc

    erlc -disable-feature maybe_expr some_file.erl

    Own Id: OTP-18944 Aux Id: PR-8067

  • 編譯器現在會在更新 record/map 字面值時發出警告。例如,考慮以下模組

    -module(t).
    -export([f/0]).
    -record(r, {a,b,c}).
    
    f() ->
        #r{a=1}#r{b=2}.

    編譯器會發出以下警告

    1> c(t).
    t.erl:6:12: Warning: expression updates a literal
    %    6|     #r{a=1}#r{b=2}.
    %     |            ^

    Own Id: OTP-18951 Aux Id: PR-8069

  • 文件已遷移為使用 Markdown 和 ExDoc。

    Own Id: OTP-18955 Aux Id: PR-8026

  • 最佳化 ets:foldlets:foldr 以使用新的 ets:next_lookup。同時使其免受表格重新命名的影響。

    Own Id: OTP-18993 Aux Id: PR-8048

  • Windows 現在支援 math 中的所有函式。

    Own Id: OTP-19001 Aux Id: PR-8164

  • erl_lint (以及延伸的 compiler) 現在會針對使用已棄用回呼的程式碼發出警告。

    目前唯一已棄用的回呼是 gen_servergen_eventgen_statem 中的 format_status/2

    您可以使用 nowarn_deprecated_callback 來關閉警告。

    Own Id: OTP-19010 Aux Id: PR-8205

  • 有一個新的模組 json 用於編碼和解碼 JSON

    編碼和解碼都可以自訂。解碼可以以類似 SAX 的方式完成,並處理多個文件和資料串流。

    Own Id: OTP-19020 Aux Id: PR-8111

STDLIB 5.2.3.3

已修復的錯誤和故障

  • 修正了 uri_string:percent_decode 規格中的錯誤

    Own Id: OTP-19380 Aux Id: GH-8755

STDLIB 5.2.3.2

已修復的錯誤和故障

  • 透過此變更,關閉程序會處理執行關閉的監管者與其他原因導致的子程序終止之間的競爭狀況。

    Own Id: OTP-19256 Aux Id: PR-8780

  • 透過此變更,當 URI 對應中未提供路徑時,uri_string:normalize 會假設為空路徑(不會當機)。

    Own Id: OTP-19266 Aux Id: ERIERL-1127, PR-8890

STDLIB 5.2.3.1

已修復的錯誤和故障

  • 修正了當關鍵字和元組出現在同一行時導致 Shell 完成當機的錯誤。

    Own Id: OTP-19157 Aux Id: PR-8638

STDLIB 5.2.3

已修復的錯誤和故障

  • 修復 erlang shell 中 -type a() :: $a. 的 shell 擴展。

    Own Id: OTP-19062

  • 修復 shell 工作控制模式,使其在輸入 TABCTRL+R 時不會崩潰。

    Own Id: OTP-19072 Aux Id: PR-8391

STDLIB 5.2.2

已修復的錯誤和故障

  • 在巨集引數中使用 maybe 建構可能會導致編譯器崩潰。

    Own Id: OTP-19031 Aux Id: GH-8268

STDLIB 5.2.1

已修復的錯誤和故障

  • argparse 顯示的說明文字現在將以正確的順序顯示子命令引數。

    Own Id: OTP-18900 Aux Id: PR-7945, GH-7934

  • 釐清了關於使用者定義說明範本的 argparse 文件。

    Own Id: OTP-18937

  • 修復 shell 擴展,使其在擴展使用無效原子時不會崩潰。

    Own Id: OTP-18953 Aux Id: GH-8016 PR-8075

STDLIB 5.2

已修復的錯誤和故障

  • 使 shell_docs 正確修剪程式碼區塊末尾的換行符號。

    Own Id: OTP-18777 Aux Id: PR-7663

  • 將某些檔案中非故意的 Erlang Public License 1.1 標頭替換為預期的 Apache License 2.0 標頭。

    Own Id: OTP-18815 Aux Id: PR-7780

  • 修復了自動完成在嘗試擴展巢狀 tuple 時可能會使 shell 崩潰的錯誤。

    Own Id: OTP-18822 Aux Id: PR-7796

  • 移除了自動完成中函式引數、tuple、record 和 map 的自動關閉功能,因為這可能會干擾 atom 的自動完成。

    Own Id: OTP-18823

  • 修復了自動完成字串格式化會移除名稱相同但大小寫不同的建議的錯誤。

    Own Id: OTP-18824

  • 修復 shell 中的 ctrl+h 和 ctrl+backspace,使其只移除一個字元而不是整個單字。

    Own Id: OTP-18826 Aux Id: PR-7797

  • 修復使其可以覆寫 shell 的預設鍵盤快速鍵。

    Own Id: OTP-18827 Aux Id: PR-7797

  • 允許在受限 shell 中使用 shell 本機函式 v()。

    Own Id: OTP-18828 Aux Id: PR-7799

  • 在撰寫無效屬性 (如 '1> -hej.') 時報告語法錯誤。

    Own Id: OTP-18829 Aux Id: PR-7799

  • 當嘗試在 map 產生器的鍵中比對 record 的一部分時,將比對整個 record。

    Own Id: OTP-18866 Aux Id: GH-7875, PR-7878

改進和新功能

  • 意外使用未來三引號字串分隔符號的警告已升級為改為警告沒有插入空白字元的相鄰字串,這實際上與字串開頭相同,但也涵蓋了字串結尾的相同情況。

    Own Id: OTP-18821 Aux Id: OTP-18746

  • 原先計畫在 OTP 27 中移除已棄用的 slave 模組,已延後至 OTP 29。

    Own Id: OTP-18840 Aux Id: PR-7629

  • 已將 guard 新增至 gen_*:start* API 函式,以便更早捕獲錯誤引數。在此變更之前,在某些情況下,錯誤引數可能會隨之而來,並導致伺服器在啟動後立即失敗。

    Own Id: OTP-18857 Aux Id: GH-7685

STDLIB 5.1.1

改進和新功能

  • 在減少已儲存的歷史記錄和結果數量時,對 shell 處理序進行垃圾回收。

    Own Id: OTP-18773 Aux Id: PR-7691

STDLIB 5.1

已修復的錯誤和故障

  • 當編譯呼叫 is_record/3 且 tuple 大小為巨大的正數時,編譯器可能會永遠執行。當在函式主體中使用時,呼叫 is_record(A, a, 0) 會使編譯器崩潰。當在 guard 中使用時,編譯器會發出不正確的程式碼,該程式碼會接受 {a> 作為 record。

    Own Id: OTP-18605 Aux Id: GH-7298, GH-7317

  • 修復 ets:tab2file 中可能在另一個 Erlang 處理序同時建立相同檔案時導致其失敗的錯誤。

    Own Id: OTP-18614 Aux Id: GH-7162, PR-7237

  • 現在將在 shell 中以友好的方式報告 {else_clause,Value} 例外。

    Own Id: OTP-18616 Aux Id: GH-7258

  • 修正錯誤情況的傳回值,使其符合文件記錄和預期的傳回值 {error, {already_started, pid()}} (當使用本機註冊名稱時)。

    Own Id: OTP-18627 Aux Id: PR-7072

  • sys:get_state/1,2sys:replace_state/2,3 已更正為將名為 error 的狀態作為狀態名稱處理,而不是作為失敗的系統回呼處理。

    對於標準伺服器行為,當狀態名稱為 error 時,這僅對 gen_statem (和 gen_fsm) 造成問題,如果完整狀態為 {error,_},則對 gen_server 造成問題。

    Own Id: OTP-18633

  • filelib:safe_relative_path/2 中修復了多個問題。如果它的第二個引數是包含符號連結的路徑,則可能會傳回不正確的結果 patch。此外,有時路徑會被錯誤地認為是不安全的。

    Own Id: OTP-18655 Aux Id: GH-6460, PR-7208

  • 修復當 erl.exe 在 Windows 上作為管道的一部分使用並嘗試設定 standard_io 裝置的編碼時發生的死鎖。

    Own Id: OTP-18675 Aux Id: PR-7473 GH-7459

  • 擴充了關於如何使用 standard_iostandard_erroruser I/O 裝置的文件。

    新增了類型 io:standard_io/0io:standard:error/0io:user/0

    Own Id: OTP-18676 Aux Id: PR-7473 GH-7459

  • 修復 h/2,3 以正確呈現多子句文件。

    Own Id: OTP-18683 Aux Id: PR-7502

  • timer:apply_after/4apply_interval/4apply_repeatedly/4 建立的計時器,如果計時器到期時無法產生新的進程,會靜默地執行失敗。這個問題現在已修正,如果產生進程失敗,系統會當機並產生錯誤傾印。

    自有 ID:OTP-18759 輔助 ID:GH-7606

  • 當 Erlang 原始程式檔缺少模組定義時,檔案中的每個規格都會出現虛假的「模組名稱不得為空」的診斷訊息。

    自有 ID:OTP-18763 輔助 ID:GH-7655

改進與新功能

  • argparse 中選項類型的參數描述已變得更明確。

    自有 ID:OTP-18679 輔助 ID:ERIERL-965

  • 澄清了 gen_server:call/2,3 上正常關閉原因的文件說明。

    自有 ID:OTP-18690 輔助 ID:PR-7511, GH-7510

  • 在 OTP 27 中,由於 0.0 將不再被視為與 -0.0 相等,因此對 0.0 進行模式匹配和等價性 (=:==/=) 比較時,現在會引發警告。

    如果需要明確匹配 0.0 (與 -0.0 不同),則可以寫入 +0.0 來抑制警告。

    算術比較運算符不受影響,包括算術相等 (==)。

    * 潛在的不相容性 *

    自有 ID:OTP-18696

  • 在 OTP-26.0 中引入的 gen_{server,statem,event} 行為的同步啟動行為 (使用 OTP-18471),已在文件中進行說明。

    自有 ID:OTP-18705 輔助 ID:GH-7524, OTP-18471, GH-6339, PR-6843

  • 新增了設定自訂多行提示的功能。

    自有 ID:OTP-18736 輔助 ID:PR-7564

  • 已根據 EEP 64 實作了針對 (意外使用) 三引號字串的警告。

    * 潛在的不相容性 *

    自有 ID:OTP-18746 輔助 ID:PR-7313, PR-7456

  • 現在可以設定 Shell 的鍵盤快捷鍵。

    自有 ID:OTP-18754 輔助 ID:PR-7604 PR-7647

STDLIB 5.0.2

修正的錯誤和故障

  • 修正了在終端機中輸入 Alt+Enter 時,游標會移至最後一行,而不是移至下一行的錯誤。

    自有 ID:OTP-18580 輔助 ID:PR-7242

  • 修正在使用 -noshell 啟動 Erlang 時,從 stdin 讀取時的 eof 處理。

    自有 ID:OTP-18640 輔助 ID:PR-7384 GH-7368 GH-7286 GH-6881

  • 修正了在 Shell 中寫入提示後收到輸出時,輸出會消失的問題。

    自有 ID:OTP-18652 輔助 ID:PR-7242

  • 以下函數在給定長列表或二進制時,現在速度快得多:

    • erlang:list_to_integer/1
    • erlang:binary_to_integer/1
    • erlang:binary_to_integer/2
    • erlang:list_to_integer/2
    • string:to_integer/1

    自有 ID:OTP-18659 輔助 ID:PR-7426

STDLIB 5.0.1

修正的錯誤和故障

  • POSIX 錯誤 exdev 有時會在某些錯誤訊息中被錯誤地描述為「跨域連結」。

    自有 ID:OTP-18578 輔助 ID:GH-7213

STDLIB 5.0

修正的錯誤和故障

  • dets 中的所有進程呼叫都已更新為使用接收佇列最佳化。

    自有 ID:OTP-18275 輔助 ID:PR-6045

  • 當啟動的進程失敗時,proc_lib:start*/* 已變為同步。這要求失敗的進程使用新的函數 proc_lib:init_fail/2,3 或退出,以表示失敗。所有 OTP 行為都已修正以執行此操作。

    所有這些啟動函數現在都會消耗來自進程連結的 'EXIT' 訊息以進行所有錯誤返回。先前只有 start_link/* 函數會執行此操作,而且僅在啟動的函數退出時,而不是在使用 init_ack/1,2init_fail/2,3 建立傳回值時。

    * 潛在的不相容性 *

    自有 ID:OTP-18471 輔助 ID:GH-6339, PR-6843

  • 修正了 file:read(standard_io, ...) 在二進制模式下意外返回 eof 的錯誤。

    自有 ID:OTP-18486 輔助 ID:PR-6881

  • 在 Shell 中,如果指令的傳回值為 undefinedv(N) 將無法擷取指令。

    自有 ID:OTP-18548 輔助 ID:PR-6967

改進與新功能

  • Erlang Shell 已改進以支援以下功能:

    • 自動完成變數、記錄名稱、記錄欄位名稱、映射鍵、函數參數類型和檔案名稱。
    • 在 Shell 中開啟外部編輯器 (使用 C-o),以便在編輯器中編輯目前的運算式。
    • 支援在 Shell 中定義記錄 (具有類型)、函數和函數類型規範,以及自訂類型。
    • 不要將分頁器指令和 io:getline 的輸入儲存到歷程記錄中。

    自有 ID:OTP-14835 輔助 ID:PR-5924

  • Gen_server 現在會快取外部函數,以用於 handle_call、handle_cast 和 handle_info。

    自有 ID:OTP-15597 輔助 ID:PR-5831

  • TTY/終端機子系統已重新編寫,方法是將更多程式碼從舊的連結驅動程式移至 Erlang,並在 NIF 中實作所有需要的 I/O 基本功能。

    在 Unix 平台上,使用者除了更好地處理 Unicode 字元和修正一些長期存在的錯誤之外,應該不會注意到太多差異。

    Windows 使用者會注意到 erl.exe 具有與一般 Unix Shell 相同的功能,並且 werl.exe 已移除並替換為 erl.exe 的符號連結。這使得 Windows Erlang 終端機體驗與 Unix 的體驗相同。

    重新編寫帶來了許多錯誤修正和功能新增:

    • 當 Erlang 退出時,TTY 現在會重設,修正了 zsh 在終止 Erlang 會話時不會中斷的問題。
    • standard_error 現在使用與 standard_io 相同的 Unicode 模式。
    • 在使用空白搜尋字串搜尋 Shell 歷程記錄時按下退格鍵,不再會中斷 Shell。
    • Tab 擴充現在適用於使用 JCL 介面啟動的遠端節點。
    • 現在可以設定 Shell 標語和會話標語 (也就是您啟動 Erlang Shell 時出現的文字)。請參閱核心文件以了解更多詳細資訊。
    • 新增了 shell:start_interactive,用於從非互動式 Erlang 會話 (例如 escript) 啟動互動式 Shell。
    • 在 Windows 上,在以分離模式啟動時,標準處理程式現在會設定為 nul 裝置,而不是取消設定。
    • 如果支援,標準 I/O 現在一律預設為 unicode 模式。先前,如果執行階段系統已使用 -oldshell-noshell 啟動 (例如在 escript 中),則預設值為 latin1。若要透過標準輸出傳送原始位元組,現在必須明確指定 io:setopts(standard_io, [{encoding, latin1}]).

    * 潛在的不相容性 *

    自有 ID:OTP-17932 輔助 ID:PR-6144 GH-3150 GH-3390 GH-4343 GH-4225

  • 新增了 zip:zip_get_crc32/2 函數,以從已開啟的 ZIP 封存擷取 CRC32 檢查碼。

    自有 ID:OTP-18159 輔助 ID:PR-6904

  • 將選項 post_process_argsdetached 新增至 peer:start 函數。

    自有 ID:OTP-18176 輔助 ID:PR-6118

  • re:replace/3,4 函數現在接受函數作為替換參數。

    自有 ID:OTP-18221 輔助 ID:PR-6197

  • base64 模組的效能已大幅提升。例如,在具有 JIT 的 x86_64 系統上,編碼和解碼速度都比 Erlang/OTP 25 快三倍以上。

    自有 ID:OTP-18228 輔助 ID:GH-5639

  • 改進了 timer:apply_interval/4 的實作,減少了計時器伺服器上的負載,並導入了新函數 timer:apply_repeatedly/4timer:apply_repeatedly/4 類似於 timer:apply_interval/4,但 timer:apply_repeatedly/4 會防止觸發的 apply 操作並行執行,而 timer:apply_interval/4 不會。

    自有 ID:OTP-18236 輔助 ID:PR-6256

  • base64 模組現在支援使用替代 URL 安全字母進行編碼和解碼,以及接受或新增遺失的 = 填補字元的選項。

    自有 ID:OTP-18247 輔助 ID:PR-6280, PR-6711

  • 新增了 shell:whereis/0,可用於尋找目前的 Shell 進程。

    自有 ID:OTP-18272 輔助 ID:PR-6279

  • Erlang Shell 在輸入 tab 時的自動完成已變更為在編輯目前行之後發生,而不是在編輯之前發生。

    可以使用 shell_expand_location STDLIB 組態參數來設定此行為。

    自有 ID:OTP-18278 輔助 ID:PR-6260

  • 新函數 ets:lookup_element/4 具有 Default 參數,如果索引鍵在資料表中不存在,則會傳回該參數。舊的 ets:lookup_element/3 會引發 badarg 例外,這既不方便又較慢。

    自有 ID:OTP-18279 輔助 ID:PR-6234

  • 在 Shell 中輸入 Ctrl+L 現在會清除畫面並重繪目前行,而不是僅重繪目前行。若要僅重繪目前行,您現在必須輸入 Alt+L。這使 Ctrl+L 的行為更接近 bash 和其他 Shell 的運作方式。

    * 潛在的不相容性 *

    自有 ID:OTP-18285 輔助 ID:PR-6262

  • 使用 standard_io 連線的 peer 節點現在會在從啟動節點的 I/O 串流中包含來自節點的標準錯誤。

    自有 ID:OTP-18287 輔助 ID:PR-5955

  • 已移除二進制語法中的限制。現在可以平行匹配二進制模式。範例:<<A:8>> = <<B:4,C:4>> = Bin

    自有 ID:OTP-18297 輔助 ID:GH-6348

  • 改進了 unicode:characters_to_list() 的類型規範。

    自有 ID:OTP-18301 輔助 ID:PR-6350

  • lists 模組中,zip 系列函數現在接受選項,以允許處理不同長度的列表。

    自有 ID:OTP-18318 輔助 ID:PR-6347

  • 文件中說明 $\^X 是 Control X 的 ASCII 代碼,其中 X 是大寫或小寫字母。但是,此表示法適用於任何字元 X,即使它沒有意義。

    在 Erlang/OTP 26 中,現在文件中說明以下字元也允許跟在 \^ 字元之後:@[\]^_?。嘗試使用其他字元將會因編譯器錯誤而被拒絕。

    $\^? 的值現在為 127 (而不是早期版本中的 31)。

    自有 ID:OTP-18337 輔助 ID:GH-6477, PR-6503

  • 新增了 binary:encode_hex/2 函數,允許編碼後的十六進位數字使用小寫或大寫字母。

    專案 ID:OTP-18354 輔助 ID:PR-6297

  • 引入了使用者可指定時間單位的 timer:tc() 變體。

    專案 ID:OTP-18355 輔助 ID:PR-6507

  • 新增函數 math:tau/0。回傳 2*math:pi()

    專案 ID:OTP-18361 輔助 ID:PR-6536

  • 現在允許在保護式和匹配規格中使用 BIF min/2max/2

    專案 ID:OTP-18367 輔助 ID:GH-6544

  • 最佳化了 gen_server:multi_call()

    專案 ID:OTP-18385 輔助 ID:PR-6698

  • 現在已實作 EEP 58 中建議的 Map Comprehensions。

    專案 ID:OTP-18413 輔助 ID:EEP-58, PR-6727

  • 透過更改原子鍵的內部排序,最佳化了一些 Map 操作。這會改變小型 Map 中原子鍵的(未記錄)列印順序以及 maps:to_list/1maps:next/1 回傳的順序。新的順序是不可預測的,並且在 Erlang VM 的不同呼叫之間可能會發生變化。

    對於順序很重要的應用程式,有一個新的函數 maps:iterator/2 可以建立迭代器,以確定的順序回傳 Map 元素。另外,io:format() 的格式字串新增了 kK 修飾符,以支援依序印出 Map 元素。

    專案 ID:OTP-18414 輔助 ID:PR-6151

  • 使 gen_server 的 init/1 以新的回傳值「靜默」失敗。

    專案 ID:OTP-18423 輔助 ID:https://github.com/erlang/backlog/issues/142

  • 改進了選擇性接收最佳化,現在可以為從其他函數回傳的參考啟用此最佳化。

    這大幅提高了 gen_server:send_request/3gen_server:wait_response/2 和類似函數的效能。

    專案 ID:OTP-18431 輔助 ID:PR-6739

  • 為了載入使用某項功能的模組,不再需要在執行階段系統中啟用該功能。在編譯時於編譯器中啟用該功能就足夠了。

    這表示,若要在 Erlang/OTP 26 中使用 maybe_expr 功能,在編譯期間啟用它就足夠了。

    在 Erlang/OTP 27 中,將預設啟用 maybe_expr 功能,但仍可以停用它。

    專案 ID:OTP-18445

  • 靜態監督者在啟動後是非常閒置的程序,因此它們現在會在啟動後休眠,以改善資源管理。

    專案 ID:OTP-18474 輔助 ID:PR-6895

  • 棄用了 dbg:stop_clear/0,因為它只是一個 dbg:stop/0 的函數別名。

    專案 ID:OTP-18478 輔助 ID:GH-6903

  • ms_transform 中已新增對動作 caller_line/0current_stacktrace/0current_stacktrace/1 的支援。

    專案 ID:OTP-18494 輔助 ID:PR-6924

  • 模組 lists 中的列舉函數系列已擴充了 enumerate/3,允許提供步進值。

    專案 ID:OTP-18495 輔助 ID:PR-6943

  • 將 Unicode 更新至 15.0.0 版。

    專案 ID:OTP-18500

  • re 模組提供支援的正規表示式程式庫很可能會在 Erlang/OTP 27 中變更。請參閱即將發生的潛在不相容性

    專案 ID:OTP-18511 輔助 ID:PR-7017

  • 改進了當減去少量元素時 sets:subtract/2 的效能。

    專案 ID:OTP-18515 輔助 ID:GH-6990

  • linter 將不再為未完整指定的 opaque 類型引發警告。

    專案 ID:OTP-18518 輔助 ID:GH-7015

  • 新增了 EEP-61 中引入的新內建類型 dynamic/0,改善了對漸進式類型檢查器的支援。

    專案 ID:OTP-18522

  • 移除 gen_statem 先前用於防止逾時或連線中斷時延遲回覆傳遞至用戶端的呼叫代理程序。由於程序別名可以處理此問題,且所有 OTP 26 Erlang 節點可以與之通訊的 Erlang 節點都支援此功能,因此不再需要此代理程序。

    專案 ID:OTP-18537 輔助 ID:PR-7081

  • 新增了 argparse 模組,以簡化 escript 和類似程式中的引數處理。

    專案 ID:OTP-18558 輔助 ID:PR-6852

  • 新增了對 shell 中多行運算式和導覽的支援。新增了新的按鍵繫結

    • 向上導覽 (ctrl+向上)/(alt+向上)
    • 向下導覽 (ctrl+向下)/(alt+向下)
    • 在行中間插入新行 (alt+enter)
    • 導覽至頂端 (alt+<)/(alt+shift+向上)
    • 導覽至底部 (alt+>)/(alt+shift+向下)
    • 清除目前的運算式 (alt+c)
    • 取消搜尋 (alt+c)
    • 在 mac 上開啟編輯器 (option+o)/(alt+o)

    修改新行的提示符號,使其更清楚提示符號已進入多行模式。支援視窗大小較小的終端機,建議不要低於 7 列和 40 欄。修改搜尋提示符號以支援多行陳述式。在從 JCL 選單繼續後重新繪製提示符號。

    專案 ID:OTP-18575 輔助 ID:PR-7169

STDLIB 4.3.1.6

已修正的錯誤和故障

  • 修正了 uri_string:percent_decode 規格中的錯誤

    Own Id: OTP-19380 Aux Id: GH-8755

STDLIB 4.3.1.5

已修正的錯誤和故障

  • 透過此變更,關閉程序會處理執行關閉的監管者與其他原因導致的子程序終止之間的競爭狀況。

    Own Id: OTP-19256 Aux Id: PR-8780

  • 透過此變更,當 URI 對應中未提供路徑時,uri_string:normalize 會假設為空路徑(不會當機)。

    Own Id: OTP-19266 Aux Id: ERIERL-1127, PR-8890

STDLIB 4.3.1.4

已修正的錯誤和故障

  • 在巨集引數中使用 maybe 建構可能會導致編譯器崩潰。

    Own Id: OTP-19031 Aux Id: GH-8268

STDLIB 4.3.1.3

改進和新功能

  • 在減少已儲存的歷史記錄和結果數量時,對 shell 處理序進行垃圾回收。

    Own Id: OTP-18773 Aux Id: PR-7691

STDLIB 4.3.1.2

已修正的錯誤和故障

  • 以下函數在給定長列表或二進制時,現在速度快得多:

    • erlang:list_to_integer/1
    • erlang:binary_to_integer/1
    • erlang:binary_to_integer/2
    • erlang:list_to_integer/2
    • string:to_integer/1

    自有 ID:OTP-18659 輔助 ID:PR-7426

STDLIB 4.3.1.1

改進和新功能

  • 靜態監督者在啟動後是非常閒置的程序,因此它們現在會在啟動後休眠,以改善資源管理。

    專案 ID:OTP-18556

STDLIB 4.3.1

已修正的錯誤和故障

  • 已更新 erl_parse 模組中的類型規格,以包含 maybe 建構和 ! 運算子。

    專案 ID:OTP-18506 輔助 ID:GH-6956

STDLIB 4.3

已修正的錯誤和故障

  • 修正了會導致分析當機的錯誤。

    專案 ID:OTP-18372 輔助 ID:GH-6580

  • 修正了格式化錯誤報告的堆疊追蹤時發生的當機。

    專案 ID:OTP-18375 輔助 ID:GH-6591

  • BIF list_to_integer/1list_to_integer/2 現在會針對無法轉換為整數的過長列表引發 system_limit 例外,而不是當機。同樣地,BIF string:to_integer/1 現在會針對過長列表回傳 {error,system_limit}

    專案 ID:OTP-18475 輔助 ID:PR-6897

改進和新功能

  • 移除新增至狀態的 supervisor 記錄中非必要的 undefined 類型。

    專案 ID:OTP-18393 輔助 ID:PR-6666

STDLIB 4.2

已修正的錯誤和故障

  • erl_tar 現在可以讀取經過填補的 gzip 壓縮 tar 檔案。file:open/2 有一個新的選項 compressed_one,可以從 gzip 檔案讀取單個成員。

    專案 ID:OTP-18289 輔助 ID:PR-6343

  • 並行呼叫 ets:rename 可能會導致 ets:delete_all_objects 在執行一半時失敗,並出現 badarg。

    專案 ID:OTP-18292 輔助 ID:PR-6366

  • 不允許從保護式呼叫函數。當透過建構具有呼叫函數的預設初始化運算式的記錄時,編譯器未能拒絕保護式中的呼叫。

    專案 ID:OTP-18325 輔助 ID:GH-6465, GH-6466

  • 當在列表 Comprehension 中使用帶有複雜欄位初始化運算式的記錄做為篩選器時,編譯器可能會當機。

    專案 ID:OTP-18336 輔助 ID:GH-6501, PR-6502

  • unicode:characters_to_binary() 可能會建構不必要的大型呼叫堆疊。

    專案 ID:OTP-18351 輔助 ID:ERIERL-885, PR-6529

改進和新功能

  • 改善了 ets:new/2 名稱衝突的錯誤訊息。顯示「名稱已存在」,而不是較不具體的「無效選項」。

    專案 ID:OTP-18283 輔助 ID:PR-6338

STDLIB 4.1.1

已修正的錯誤和故障

  • 當監管控制連線的程序當機時,peer 節點無法停止。當使用替代的控制連線時,當啟動 peer 節點的節點停止該節點時,此監管程序也經常當機,導致 peer 節點在沒有停止的情況下徘徊。

    專案 ID:OTP-18249 輔助 ID:PR-6301

STDLIB 4.1

已修正的錯誤和故障

  • 修正了global中因nodeup/nodedown訊息在連線流量之前/之後未傳遞而導致的不一致錯誤。同時也修復了global_groupglobal中各種其他的不一致錯誤和死鎖。

    為了作為這些修復的基礎,引入了一個新的 BIF erlang:nodes/2,並擴展了 net_kernel:monitor_nodes/2

    如果命令列上存在多個實例,-hidden-connect_all 命令列參數將無法運作,此問題已修正。同時也引入了新的核心參數 connect_all,以取代 -connect_all 命令列參數。

    自有 ID:OTP-17934 輔助 ID:PR-6007

  • 修正了 public_key:ssh* 函式在「已移除功能使用者指南」中被列在錯誤版本下的問題。

    自有 ID:OTP-18139 輔助 ID:PR-6060

  • 修正了 gen_statemgen_servergen_eventformat_status/1 的類型規格,以說明傳回值的類型與參數類型相同(而不是與參數值相同)。

    自有 ID:OTP-18142 輔助 ID:PR-6078

  • 如果 timer 伺服器子規格已經存在於 kernel_sup 中,但尚未啟動,則 timer 伺服器將會啟動失敗並出現 {error, already_present} 錯誤,而不是重新啟動伺服器。

    自有 ID:OTP-18146 輔助 ID:PR-5983

  • 當在 gen_statem 中變更回呼模組時,舊模組的 state_enter 呼叫標誌會被用於新模組中的第一個事件,這可能會混淆新模組並導致故障。此錯誤已修正。

    在此變更中,部分 sys 除錯訊息格式已修改,這可能會對依賴該格式的除錯程式碼造成問題。

    * 潛在的不相容性 *

    自有 ID:OTP-18239

改進與新功能

  • 有一個新的組態選項 --enable-deterministic-build,它會在建置 Erlang/OTP 時套用 deterministic 編譯器選項。deterministic 選項已得到改進,以消除數個應用程式中更多不確定性的來源。

    自有 ID:OTP-18165 輔助 ID:PR-5965

  • rfc339_to_system_time/1,2 函式現在允許時區省略分鐘部分。

    自有 ID:OTP-18166 輔助 ID:PR-6108

  • gen_event 中的 receive 陳述式已最佳化為不使用選擇性接收(這從來不需要,並且可能在高負載下導致嚴重的效能下降)。

    自有 ID:OTP-18194 輔助 ID:PR-6199

  • 新增新的 API 函式 erl_features:configurable/0

    自有 ID:OTP-18199 輔助 ID:PR-5790

STDLIB 4.0.1

已修正錯誤和故障

  • 在 Erlang/OTP 25 的初始版本中,記錄初始化中繫結到 _ 偽欄位的表達式總是會被評估一次,即使記錄中的所有其他欄位都已明確初始化。如果不是所有欄位都已初始化,這將會破壞將表達式 error(...) 繫結到 _ 以取得異常的用例。

    繫結到 _ 的行為已還原為 OTP 25 之前的行為,也就是,如果所有欄位都已繫結到明確的值,則不會評估該表達式。

    自有 ID:OTP-18110 輔助 ID:GH-6000

STDLIB 4.0

已修正錯誤和故障

  • 改進 Erlang 程式碼檢查工具對未使用類型的檢查。

    自有 ID:OTP-17370 輔助 ID:GH-4784

  • 修正在 proc_lib:stop/3 中的競爭條件,當給定的逾時時間非常短時,該程序不會停止。

    自有 ID:OTP-17480 輔助 ID:GH-4853 PR-4872

  • 現在 ms_transform 完全支援映射。

    自有 ID:OTP-17518 輔助 ID:GH-4915

  • 修復當第一個參數為 self() 時,gen_server:call 會擲出錯誤而不是因逾時而失敗的問題。

    對於 gen_statem:call/3、gen_event:sync_notify/2 和任何其他依賴內部 gen:call/3 函式的功能,也進行了相同的修復。

    當使用 io:format/2 且目前的 group_leader 設定為目前的程序時,也進行了類似的修復。

    * 潛在的不相容性 *

    自有 ID:OTP-17544 輔助 ID:PR-5008

  • erl_pp 列印一元 - 和 + 運算子時,會在運算子和運算元之間加上空格。此問題已修正為兩者之間沒有任何空格。

    自有 ID:OTP-17566 輔助 ID:PR-5095, GH-5093

  • 調整 uri_string:normalize 對於未定義埠的 URI 行為 (具有埠冒號但沒有埠值的 URI 字串,或具有埠 => undefined 的 URI 映射)。

    從 http_request 模組中移除多餘的正規化。

    在此變更之前,正規化不會在這種情況下移除埠子元件,並且可能會傳回例如 "https://127.0.0.1:" URI。

    * 潛在的不相容性 *

    自有 ID:OTP-17627

  • 修正 re:run 中的歸約計數錯誤,該錯誤導致函式在執行 global 比對時過於頻繁地產生結果。

    自有 ID:OTP-17661 輔助 ID:PR-5165

  • 修正當使用 read_concurrency 選項時,從 ets:info(Tid,memory) 傳回的記憶體值。

    在此修復之前,排程器特定的鎖定快取行所使用的記憶體不計入總數。這導致在具有多個排程器的系統上,對於具有多個鎖定的表格,傳回的記憶體使用量非常不正確。

    自有 ID:OTP-17832 輔助 ID:PR-5494

  • 透過修正 gen_event 崩潰記錄列印中的參數順序,避免混淆。

    自有 ID:OTP-17878

  • 修正 string:next_grapheme/1,使其在尾部傳回空二進位制字串,以便用於最後一個字形叢集的二進位制輸入。

    * 潛在的不相容性 *

    自有 ID:OTP-18009 輔助 ID:PR-5785

  • 修正 supervisor:sup_name/0supervisor:sup_ref/0 類型的類型規格。

    自有 ID:OTP-18034 輔助 ID:PR-4661, GH-4622

  • 如果使用了預設記錄欄位初始化 (_ = Expr),即使所有記錄欄位都已明確初始化,也不會評估 Expr。這不是問題,除非 Expr 會繫結一個後續使用的變數,在這種情況下,編譯器會崩潰。

    例如,如果記錄 #r{} 定義為只有一個欄位 a,則以下程式碼會使編譯器崩潰

    #r{a=[],_=V=42}, V

    為了修正該問題,編譯器將確保 Expr 至少被評估一次。編譯器現在會將範例重寫為本質上

    V=42, #r{a=[]}, V

    自有 ID:OTP-18083

改進與新功能

  • 使用者現在可以使用 {write_concurrency, auto} 選項來配置 ETS 表格。此選項會強制表格在執行階段根據偵測到的並行程度,自動變更使用的鎖定數。當 {write_concurrency, auto} 處於啟用狀態時,預設會啟用 {decentralized_counters, true} 選項。

    此選項與其他 ETS 最佳化選項比較之下的基準測試結果可在此處取得

    https://erlang.dev.org.tw/bench/ets_bench_result_lock_config.html

    自有 ID:OTP-15991 輔助 ID:PR-5208

  • 已棄用 gen_servergen_statemgen_eventformat_status/2 回呼,改用新的 format_status/1 回呼。

    新的回呼增加了限制和變更更多內容的可能性,而不僅僅是狀態,例如最後收到的訊息、終止原因以及每個行為類型的更多特定事件。有關更多詳細資訊,請參閱各模組的文件。

    自有 ID:OTP-17351 輔助 ID:GH-4673 PR-4952

  • timer 模組已現代化並變得更有效率,這使得計時器伺服器不易過載。timer:sleep/1 函式現在接受任意大的整數。

    自有 ID:OTP-17481 輔助 ID:PR-4811

  • 新增 lists:enumerate/[1,2]

    自有 ID:OTP-17523 輔助 ID:PR-4928

  • 現在可以在 XDG Config Home 目錄中找到組態檔案 .erlang.erlang.cookie.erlang.crypt

    有關更多詳細資訊,請參閱每個檔案和 filename:basedir/2 的文件。

    自有 ID:OTP-17554 輔助 ID:GH-5016 PR-5408 OTP-17821

  • calendar 函式 system_time_to_rfc3339/2rfc3339_to_system_time 中支援 native 時間單位。

    自有 ID:OTP-17592 輔助 ID:ERIERL-663, PR-5243

  • 已最佳化標記元組測試和函式呼叫,現在比以前稍微便宜一些。

    在確保所有裝箱的項在元數詞後至少分配一個字之後,這些最佳化成為可能。這是透過讓所有空元組都參考相同的空元組常值來完成的,這也減少了空元組的記憶體使用量。

    自有 ID:OTP-17608

  • parallel_messages_SUITE 中的訊號佇列基準測試和 ets_SUITE 中的 ETS 基準測試具有基準測試結果視覺化 HTML 頁面,並帶有「填滿螢幕」按鈕,以使圖表更大。此按鈕以前無法按預期運作。當按下圖表的按鈕時,最後一個圖表被更大的版本取代,而不是按鈕上方的圖表。此問題已修正。

    自有 ID:OTP-17630

  • 新模組 peer 取代了 slave 模組。slave 模組現在已過時,將在 OTP 27 中移除。

    peer 包含一個擴展且更強大的 API,用於啟動 erlang 節點。

    自有 ID:OTP-17720 輔助 ID:PR-5162

  • 此變更在 uri_string 模組中引入了引號和取消引號函式 - 取代了 http_uri 中已棄用的編碼和解碼函式。

    自有 ID:OTP-17778 輔助 ID:GH-5368

  • 為了讓使用者更容易管理多個未完成的非同步 call 請求,已在 erpcgen_servergen_statemgen_event 中引入了使用請求識別碼集合的新功能。

    自有 ID:OTP-17784 輔助 ID:PR-5792

  • 更新至 Unicode 14.0 規格。

    自有 ID:OTP-17869 輔助 ID:PR-5595

  • 下列 ets 類型已重新命名為更清晰的名稱:tab/0 改為 table/0,以及 comp_match_spec/0 改為 compiled_match_spec/0

    類型 table_access/0table_type/0 已匯出。

    自有 ID:OTP-17901 輔助 ID:GH-4968 PR-5649

  • 新增對 .asn1 檔案的支援,使其能被加入 filelib:find_file/1filelib:find_source/1 的預設搜尋規則中。

    自有 ID:OTP-17908 輔助 ID:GH-5655 PR-5669

  • 已將類型規範加入 gen_server,且已更新文件以利用此功能。

    這暴露出一些類型違規,已在 globallogger_olprpc 中修正。

    自有 ID:OTP-17915 輔助 ID:PR-5751, GH-2375, GH-2690

  • 現在可以使用兩個或三個參數呼叫 erl_eval 的非本地函數處理器。當使用三個參數呼叫時,第一個參數是抽象格式中節點的註解。

    現在所有評估期間的錯誤都會透過 erlang:raise/3 傳遞。如果受限 shell 處於啟用狀態,且不允許 erlang:raise/3 通過,則評估錯誤將以較不清晰的方式列印。請參閱 shell 中受限 shell 的文件。

    * 潛在的不相容性 *

    自有 ID:OTP-17925 輔助 ID:PR-5631

  • 新增 filelib:ensure_path/1,確保給定路徑的所有目錄都存在(與 filelib:ensure_dir/1 不同,後者不會建立路徑的最後一段)。

    自有 ID:OTP-17953 輔助 ID:PR-5621

  • 已將函數 groups_from_list/2groups_from_list/3 新增至 maps 模組。

    自有 ID:OTP-17969 輔助 ID:PR-5588

  • 已重構 gen_server,當回呼在 Timeout 欄位中傳回錯誤值 (timeout() | 'hibernate' | {'continue,_}) 時,會擲出更易讀的例外,並且也會驗證 gen_server:enter_loop/3,4,5 API 函數中的引數。

    自有 ID:OTP-17974 輔助 ID:GH-5683

  • 已將用於移除重複項目的函數 uniq/1uniq/2 新增至 lists 模組。

    自有 ID:OTP-17977 輔助 ID:GH-5606, PR-5766

  • 新增了對 EEP-60 中所述的可設定功能的支援。功能可以在編譯期間使用選項(-enable-feature Feature-disable-feature Feature+{feature, Feature, enable|disable})至 erlc,以及使用檔案中的指令 (-feature(Feature, enable|disable).) 來啟用/停用。類似的選項可以用於 erl,以啟用/停用在執行階段允許的功能。新的 maybe 運算式 (EEP-49) 完全支援作為功能 maybe_expr。功能的支援已記錄在參考手冊中。

    自有 ID:OTP-17988

  • 自 OTP 25 起已棄用的函數 filename:safe_relative_path/1 已被移除。請改用 filelib:safe_relative_path/2

    * 潛在的不相容性 *

    自有 ID:OTP-17991

  • 已將新的 PRNG 新增至 rand 模組:mwc59,此 PRNG 是與 Sebastiano Vigna 合作開發的。它適用於需要非常快速的偽隨機數的應用程式,並且配有兩個輸出值擾亂器,一個快速和一個徹底。

    也匯出了 exsp 產生器的兩個內部函數,以便它們可以在 rand 外掛程式框架之外使用,以減少一些開銷。

    也匯出了內部 splitmix64 產生器,這對於為自己的 PRNG 以外的其他 PRNG 類型設定種子很有用。

    自有 ID:OTP-18011

STDLIB 3.17.2.4

已修正的錯誤和故障

  • 以下函數在給定長列表或二進制時,現在速度快得多:

    • erlang:list_to_integer/1
    • erlang:binary_to_integer/1
    • erlang:binary_to_integer/2
    • erlang:list_to_integer/2
    • string:to_integer/1

    自有 ID:OTP-18659 輔助 ID:PR-7426

STDLIB 3.17.2.3

改進和新功能

  • 靜態監督者在啟動後是非常閒置的程序,因此它們現在會在啟動後休眠,以改善資源管理。

    專案 ID:OTP-18556

STDLIB 3.17.2.2

已修正的錯誤和故障

  • 不允許從保護式呼叫函數。當透過建構具有呼叫函數的預設初始化運算式的記錄時,編譯器未能拒絕保護式中的呼叫。

    專案 ID:OTP-18325 輔助 ID:GH-6465, GH-6466

STDLIB 3.17.2.1

已修正的錯誤和故障

  • 當在 gen_statem 中變更回呼模組時,舊模組的 state_enter 呼叫標誌會被用於新模組中的第一個事件,這可能會混淆新模組並導致故障。此錯誤已修正。

    在此變更中,部分 sys 除錯訊息格式已修改,這可能會對依賴該格式的除錯程式碼造成問題。

    * 潛在的不相容性 *

    自有 ID:OTP-18239

STDLIB 3.17.2

已修正的錯誤和故障

  • shell_docs:get_doc/3shell_docs:get_callback_doc/3shell_docs:get_type_doc/3 的類型規範錯誤地指出傳回的 Metadata 是空對應。

    自有 ID:OTP-18081

STDLIB 3.17.1

已修正的錯誤和故障

  • 編譯時間不再記錄在 BEAM 檔案中。仍然有一些未記錄的函數嘗試擷取編譯時間。這些函數現在已被移除。

    自有 ID:OTP-17962

STDLIB 3.17

已修正的錯誤和故障

  • 修正不支援 Unicode 的終端機上 nbsp 的呈現。

    自有 ID:OTP-17662 輔助 ID:PR-5206

  • 改進 erl_error 列印輸出,當 re 無法編譯正規表示式時,也會印出關於編譯失敗原因的提示。

    自有 ID:OTP-17750 輔助 ID:PR-5366

  • 修正 supervisor_bridge:start_link() 的規格。

    自有 ID:OTP-17766 輔助 ID:PR-5362

  • supervisor 中新增遺失的關閉子句,這些子句可能導致錯誤的錯誤報告。

    自有 ID:OTP-17767 輔助 ID:PR-5344

改進和新功能

  • no_auto_import_types 加入 erl_lint,以允許模組定義與預定義類型同名的類型。

    自有 ID:OTP-17744 輔助 ID:PR-5292

STDLIB 3.16.1

已修正的錯誤和故障

  • 修正一個錯誤,該錯誤可能導致當監督者在取消連結與將關閉訊號傳送給子程序之間死亡時,子程序變成孤立狀態。

    也可能由於監督者關閉子程序與該子程序同時自行退出之間的競爭而導致不穩定的監督者報告。

    自有 ID:OTP-17649 輔助 ID:GH-5193, PR-5201

STDLIB 3.16

已修正的錯誤和故障

  • 修正 io:format~p 不再將浮點數解譯為可列印字元。

    自有 ID:OTP-17424 輔助 ID:GH-4801 PR-4803

  • 修正 base64 編碼/解碼函數的規格以包含 0。

    自有 ID:OTP-17429 輔助 ID:GH-4761

  • 失敗的呼叫 io:format("~p\n") 會導致第 0 行的警告,而不是正確的行號和欄號。這已修正,並且所有對 io:format() 的失敗呼叫的警告都已重新措辭,以更清楚地說明問題所在。

    自有 ID:OTP-17430

  • 當給定選項 warn_missing_specexport_all 時,只會針對使用 -export 屬性明確匯出的函數發出遺失規格的警告。

    自有 ID:OTP-17434 輔助 ID:GH-4772

  • 使用內容是檔案名稱(而非目錄)的 atom 呼叫 c:ls/1 會導致當機。

    自有 ID:OTP-17463 輔助 ID:GH-4916

  • 即使尚未看到 -module() 宣告,MODULEMODULE_STRING 巨集也始終會顯示為已定義(當由 -ifdef 測試時)。已變更為,如果先前未看到 -module(),則 -ifdef ?MODULE. 將不會認為 ?MODULE 已定義。

    自有 ID:OTP-17505 輔助 ID:GH-4995

  • 修正 shell_docs 中呈現遺失類型和回呼的錯誤。

    自有 ID:OTP-17573 輔助 ID:ERL-1264 GH-4270

  • 當編譯器給定 deterministic 選項時,?FILE 巨集會在第一個 include 指令之前展開為來源檔案的完整路徑,並且在 include 指令之後展開為檔案名稱的基礎部分。

    自有 ID:OTP-17581 輔助 ID:PR-5141

  • 修正損壞的 win32reg:delete_key,並修正 win32reg:valuedefault 值。

    自有 ID:OTP-17622 輔助 ID:PR-5038

  • 修正呼叫 maps:get(some_key, #{}) 的錯誤資訊。

    自有 ID:OTP-17634 輔助 ID:GH-5196

改進和新功能

  • 當提供無效的引數時,io 模組中的大多數輸出函數現在會列印額外的錯誤資訊。這些函數為:io:formatio:fwriteio:put_charsio:nlio:write

    自有 ID:OTP-17317 輔助 ID:PR-4757

  • EEP-54(提供更多錯誤相關資訊)現在包含 format_error 回呼的兩個新傳回值:generalreason

    format_error 回呼傳回的多行錯誤描述現在會正確縮排。

    已擴充 Erlang 參考手冊中 erl_errorerror/3錯誤和錯誤處理的文件。

    自有 ID:OTP-17454 輔助 ID:PR-4764

  • lists 模組的文件中,已澄清謂詞函式必須傳回布林值。

    自有 ID:OTP-17503 輔助 ID:GH-4985

  • 已釐清 c:c/1c:c/2c:c/3 的文件。

    自有 ID:OTP-17571 輔助 ID:GH-5103

STDLIB 3.15.2

已修正的錯誤和故障

  • 修正一個錯誤,該錯誤可能導致使用控制序列 pP 格式化元組並使用選項 chars_limit 限制輸出時發生當機。

    自有 ID:OTP-17525 輔助 ID:GH-5053

STDLIB 3.15.1

修正的錯誤與故障

  • 修正了一個當使用控制序列 p 或 P 格式化詞語,並使用 chars_limit 選項限制輸出時,可能導致迴圈的錯誤。

    自有 ID:OTP-17459 輔助 ID:GH-4824, GH-4842

STDLIB 3.15

修正的錯誤與故障

  • gen_statem 中使用相對時間 0 的逾時行為不完全符合預期模型。現已修正。

    此修正引入了一個小的潛在不相容性,例如當將狀態逾時與插入的事件結合使用時,且插入的事件在具有逾時的狀態中進行狀態更改。在此修正之前,即使在第二次狀態更改後,也可能會傳遞狀態逾時,但現在可以保證狀態逾時僅在它開始的狀態中傳遞,即使在這種邊緣情況下也是如此。

    * 潛在的不相容性 *

    自有 ID:OTP-15107 輔助 ID:ERL-1381, PR-2813

  • 修正了 erl_eval 中關於位元字串推導式的錯誤。

    自有 ID:OTP-16865

  • 以點開頭的檔案名稱(例如 ".gitignore")現在被視為檔案名稱,而不是 filename:extension/1filename:rootname/1 的副檔名。

    自有 ID:OTP-16905

  • 修正了當使用 allow_missing_chunks 選項時,如果缺少具名區塊,beam_lib:chunks/3 會崩潰的錯誤。

    自有 ID:OTP-16950 輔助 ID:ERL-1378

  • 浮點數零 (0.0) 可以是正數 (+0.0) 也可以是負數 (-0.0)。編譯器、執行時系統和 STDLIB 中已修正多個錯誤,以確保 0.0 上的負號不會遺失。

    自有 ID:OTP-17077 輔助 ID:ERL-1431, PR-2903, PR-2905, PR-2906

  • 當使用 -MMD 選項來產生依賴檔案和 BEAM 檔案時,消除了 Dialyzer 崩潰的問題。

    自有 ID:OTP-17118 輔助 ID:PR-2825

  • 修正了 shell_docserl_docgenem 標籤解釋為 strong 的錯誤。

    自有 ID:OTP-17122

  • 在 Solaris 上,math:acos/1math:asin/1 函式對於有效域之外的引數不會失敗。

    自有 ID:OTP-17133

  • 在使用 ms_transform 時,會靜默 unused_record 警告。解析轉換 ms_transform 將記錄替換為元組,這可能會導致 Erlang 程式碼檢查器發出有關未使用記錄的警告。

    自有 ID:OTP-17186

  • 記錄了關於 re 模組中 [:ascii:] 字元類匹配 Latin-1 字元的缺陷。

    自有 ID:OTP-17222 輔助 ID:GH-4544

  • 修正了通用行為中啟動函式的 spec

    自有 ID:OTP-17342 輔助 ID:GH-4725 PR-4726

  • 監督者拒絕關機值為 0 的子規格。

    自有 ID:OTP-17364 輔助 ID:PR-4747

改進和新功能

  • rand 模組中,現在可以使用演算法別名:default,來為預設演算法設定種子。

    使用 rand:bytes/1rand:bytes_s/2 實作了產生虛擬隨機二進制檔案的功能。

    自有 ID:OTP-14646 輔助 ID:PR-2920

  • 已在 proplists 模組中新增了新函式:to_map/1,2from_map/1

    自有 ID:OTP-14647 輔助 ID:PR-2910

  • 已在 queue 模組中新增了新函式:all/2any/2delete/2delete_r/2delete_with/2delete_with_r/2

    自有 ID:OTP-14650 輔助 ID:PR-2850

  • 已在 queue 模組中新增了新函式:fold/2filtermap/2

    自有 ID:OTP-14793 輔助 ID:PR-2791

  • 已刪除對在 OTP R15 之前建立的抽象程式碼的支援。

    自有 ID:OTP-16678 輔助 ID:PR-2627

  • 實作了 EEP 54 中提出的,關於 BIF 呼叫失敗的擴充錯誤資訊。

    當 Erlang Shell 中的 BIF 呼叫失敗時,將會列印更多關於哪個或哪些引數發生錯誤的資訊。當 BIF 呼叫失敗時,proc_libcommon_testqlc 也會提供相同的擴充錯誤資訊。

    對於希望提供相同擴充錯誤資訊的應用程式,有新的函式 erl_error:format_exception/3erl_error:format_exception/4

    有一個新的 error/3 BIF,允許應用程式或程式庫以相同方式為其自身的例外狀況提供擴充錯誤資訊。

    自有 ID:OTP-16686

  • 引入了 EEP 53 中概述的程序別名功能。引入它是為了提供一種輕量機制,可以防止在逾時或連線遺失後的回覆延遲。如需更多資訊,請參閱 EEP 53 和新的 alias/1 BIF 以及 monitor/3 BIF 的新選項的文件。

    gen_servergen_statemgen_event 使用的框架中的 call 操作已更新為利用別名以防止延遲回應。gen_statem 行為在分散式案例中仍然使用代理程序,因為它始終防止延遲回覆,並且別名不適用於 OTP 24 之前的節點。代理程序可以在 OTP 26 中移除。

    別名功能也使得引入與 gen 行為中 erpc:receive_response() 函式類似的新函式成為可能,因此還引入了新函式 gen_server:receive_response()gen_statem:receive_response()gen_event:receive_response()

    自有 ID:OTP-16718 輔助 ID:PR-2735

  • 改進了關於 gen_server 終止時發出的結束信號的文件。

    自有 ID:OTP-16910 輔助 ID:PR-2771

  • 已在 maps 模組中新增了新函式:merge_with/3intersect/2intersect_with/3filtermap/2from_keys/2maps:foreach/2

    maps:merge_with/3merge/2 相同,但接受一個額外的 fun,用於組合具有相同鍵的項目。

    maps:intersect/2 計算兩個 Map 的交集。

    maps:intersect_with/3intersect/2 相同,但接受一個額外的 fun,用於組合相交的項目。

    maps:filtermap/2 允許在單次傳遞中篩選和映射 Map。

    maps:from_keys/2 從鍵的列表和單一值建構 Map,可用於最佳化集合運算,例如 from_list/1、filter/2、intersection/2 和 subtract/2。

    maps:foreach/2 允許對 Map 進行迭代,而不傳回任何值。

    自有 ID:OTP-16936 輔助 ID:ERL-1367

  • 已移除實驗性的 HiPE 應用程式,以及其他應用程式中的所有相關功能。

    * 潛在的不相容性 *

    自有 ID:OTP-16963

  • 已移除在 OTP 20 中已棄用的 filename:src/1 函式。請改用 filelib:find_source/1,3

    * 潛在的不相容性 *

    自有 ID:OTP-16971

  • 已變更浮點數的漂亮列印器,以便更容易看出數字的整數部分是否已四捨五入。變更後,可能已四捨五入的數字始終會出現在最後一個或指數字元(e 或 E)之前。這是透過在整數部分可能被四捨五入的情況下,始終使用科學記號列印數字來完成。

    自有 ID:OTP-16980 輔助 ID:ERL-1308

  • 接受來自遠端節點的大小上限為 160 位元的參考。這是朝向在未來 OTP 版本中使用上限為 160 位元的參考的升級路徑的第一步。

    自有 ID:OTP-17005 輔助 ID:OTP-16718

  • erl_parse:abstract/2 新增 location 選項。

    自有 ID:OTP-17024

  • maps API 中的所有長時間執行函式現在都會產生結果。在先前的版本中,函式 maps:from_list/1maps:keys/1maps:values/1 不會產生結果。這可能會導致對程序的排程不公平。

    自有 ID:OTP-17057

  • 現在,sets 模組具有選用的基於 Map 的實作,如 EEP 50 中所述。

    若要使用此實作,請將 {version,2} 選項傳遞給 sets:new/1sets:from_list/2

    自有 ID:OTP-17059 輔助 ID:PR-2864

  • 新增了 shell_docs:supported_tags/0。此函式可用於檢索 shell_docs 目前支援的標籤。

    自有 ID:OTP-17120

  • shell_docs 使用的 application/erlang+html 文件儲存格式已更新,以包含標籤 bstrongh4h5h6

    自有 ID:OTP-17121

  • 不要以不必要的括號漂亮列印 catch 表達式。PR-2584 中 Erlang 解析器文法的重寫表示,在許多情況下,不再需要 catch 表達式周圍的括號。

    自有 ID:OTP-17169 輔助 ID:PR-2584

  • 改進了 gen_server 文件中 Module:init/1{continue,Continue} 的說明。

    自有 ID:OTP-17171 輔助 ID:PR-3011

  • 現在,erl_eval 模組接受 Map 來追蹤繫結。使用 orddict 進行繫結仍然有效。

    自有 ID:OTP-17175

  • 記錄了 epp:scan_erl_form/1,並新增了 epp:scan_file/2

    自有 ID:OTP-17199 輔助 ID:PR-2658

  • ioio_lib 模組使用的標準浮點數列印演算法已從 [1] 中描述的演算法變更為 Ryu 演算法 [2]。這為大多數浮點數的列印帶來顯著的速度提升,並小幅改善了記憶體消耗。

    [1]: Robert G. Burger 和 R. Kent Dybvig。1996 年。快速且準確地列印浮點數。於 ACM SIGPLAN 1996 年程式語言設計與實作會議論文集 (PLDI '96)。美國紐約州紐約市電腦協會,108-116 頁。DOI:https://doi.org/10.1145/231379.231397

    [2]: Ulf Adams。2018 年。Ryū:快速浮點數轉字串轉換。於第 39 屆 ACM SIGPLAN 程式語言設計與實作會議論文集 (PLDI 2018)。美國紐約州紐約市電腦協會,270-282 頁。DOI:https://doi.org/10.1145/3192366.3192369

    感謝 Thomas Depierre

    自身 ID:OTP-17210

  • 在 binary 模組中新增十六進位編碼和解碼函式。

    自身 ID:OTP-17236 輔助 ID:PR-3014

  • 已移除未記載且部分損壞的 ets:filter/3 函式。

    自身 ID:OTP-17263

  • shell_docs 中新增支援以顯示任何 "text" 文件格式。這表示 shell 中的 h(Module) 現在可以顯示 Elixir 文件中的 "text/markdown"

    自身 ID:OTP-17267

  • 類型為 setbagduplicate_bag 的 ETS 表格中金鑰的內部雜湊已加入鹽值,以與 erlang:phash2 不同。這是為了避免當使用 phash2 將金鑰分佈到不同的表格/節點時,發生不良的雜湊情況。

    自身 ID:OTP-17276 輔助 ID:PR-2979

  • 已更新至 Unicode 13.0 規格。

    自身 ID:OTP-17327 輔助 ID:PR-4707

  • 新增編譯器選項 {nowarn_unused_record, RecordNames}。記載編譯器選項 nowarn_unused_type

    自身 ID:OTP-17330

  • 在監管者中實作 EEP 56。它新增了 significant 子項的概念,以及 auto_shutdown 監管者旗標。

    如需更多資訊,請參閱監管者手冊頁面

    自身 ID:OTP-17334 輔助 ID:PR-4638、EEP-56

  • 修正了程式碼中比對帶有底線前綴的變數時的警告。

    自身 ID:OTP-17385 輔助 ID:OTP-17123

STDLIB 3.14.2.3

修正的錯誤和故障

  • 不允許從保護式呼叫函數。當透過建構具有呼叫函數的預設初始化運算式的記錄時,編譯器未能拒絕保護式中的呼叫。

    專案 ID:OTP-18325 輔助 ID:GH-6465, GH-6466

STDLIB 3.14.2.2

修正的錯誤和故障

  • 修正一個錯誤,該錯誤可能導致使用控制序列 pP 格式化元組並使用選項 chars_limit 限制輸出時發生當機。

    自有 ID:OTP-17525 輔助 ID:GH-5053

STDLIB 3.14.2.1

修正的錯誤和故障

  • 修正了一個當使用控制序列 p 或 P 格式化詞語,並使用 chars_limit 選項限制輸出時,可能導致迴圈的錯誤。

    自有 ID:OTP-17459 輔助 ID:GH-4824, GH-4842

STDLIB 3.14.2

修正的錯誤和故障

  • 由 zip 模組壓縮的字典沒有取得可執行權限(針對檔案擁有者),這使得字典內的檔案無法存取。此問題已修正,方法是給予 zip 封存檔內的字典 XRW 權限。

    自身 ID:OTP-17295 輔助 ID:GH-4687

STDLIB 3.14.1

修正的錯誤和故障

  • 處理 erl_parse:tokens() 中的映射。

    自身 ID:OTP-16978

  • 已修正 erlang shell 函式 rr,使其能夠從程式碼封存檔中的檔案讀取記錄。

    自身 ID:OTP-17182 輔助 ID:PR-3002

  • 如果要求 beam_lib 傳回 Elixir 產生的 BEAM 檔案的抽象程式碼,且電腦上未安裝 Elixir,則 beam_lib 將不再當機,而是會傳回錯誤元組。已更新 cover:compile_beam()cover:compile_beam_directory() 函式,使其在該情況下也傳回錯誤元組。

    自身 ID:OTP-17194 輔助 ID:GH-4353

  • 更正範例模組 erl_id_trans 中關於 {char, C} 類型的內容。

    自身 ID:OTP-17273

STDLIB 3.14

修正的錯誤和故障

  • 此變更修正了使用 uri_string:recompose/1 時,路徑元件中深層清單的處理方式。

    自身 ID:OTP-16941

  • 修正 shell_docs,使其在分頁輸出時清除 shell 裝飾(粗體/底線)。

    修正將 shell_docs 與 edoc 整合時的各種小渲染問題。

    自身 ID:OTP-17047

改進和新功能

  • 改善了 uri_string 模組的 API 和文件。

    在使用者指南中新增了關於統一資源識別碼及其透過新 API 處理方式的新章節。

    新增了兩個新的 API 函式:uri_string:allowed_characters/0 和 uri_string:percent_decode/1。

    此變更已標記為可能不相容,因為 uri_string:normalize/2 過去會解碼與保留集中沒有的字元對應的百分比編碼字元三元組。在此變更之後,uri_string:normalize/2 將只解碼與未保留集(ALPHA / DIGIT / "-" / "." / "_" / "~")中的字元對應的百分比編碼三元組。

    * 潛在的不相容性 *

    自身 ID:OTP-16460

  • shell_docs 模組已擴展,可以針對渲染的文字設定 unicode、ansi 和欄位大小。

    自身 ID:OTP-16990

STDLIB 3.13.2

修正的錯誤和故障

  • 如果呼叫的頂點在其名稱詞組中有 '_' 原子,則函式 digraph:in_edges/2digraph:out_edges/2 會傳回錯誤的邊緣。

    自身 ID:OTP-16655

  • filelib:wildcard("not-a-directory/..") 應傳回空清單。在 Windows 上,它傳回了 "not-a-directory/.."

    自身 ID:OTP-16700

  • 修正 shell_docs:render 的類型規格,使其對 MFA 使用正確的類型。

    自身 ID:OTP-16739

  • 當主機存在但輸入路徑不是絕對路徑時,修正 uri_string:recompose/1。

    此變更防止在路徑不是以斜線開頭時,重新組合操作變更主機的頂層網域。

    自身 ID:OTP-16751 輔助 ID:ERL-1283

  • 當 'if' 預處理器指令引用未定義的符號時,epp 模組會傳回格式錯誤的錯誤詞組。當使用錯誤的錯誤詞組呼叫 epp:format_error/1 時,會發生當機。

    自身 ID:OTP-16816 輔助 ID:ERL-1310

  • 如果 Start > length(List) + 1lists:sublist(List, Start, Len) 會失敗並產生例外狀況,即使文件中明確說明「Start+Len 超出清單的長度並非錯誤」。

    自身 ID:OTP-16830 輔助 ID:ERL-1334、PR-2718

STDLIB 3.13.1

修正的錯誤和故障

  • simple_one_for_one 監管者的暫時子項終止時,監管者的內部狀態會損壞,導致監管者保留監管者啟動後續子項的啟動引數,導致監管者的堆積不必要地增長。此狀態損壞也可能會導致其他問題。

    自身 ID:OTP-16804

STDLIB 3.13

修正的錯誤和故障

  • 編譯具有過度巢狀結構的比對規格會導致執行階段系統因排程器堆疊耗盡而當機。在此情況下,受影響的函式現在會引發 system_limit 錯誤例外狀況,而不是使執行階段系統當機。

    自身 ID:OTP-16431 輔助 ID:ERL-592

  • 如果受影響的欄位數量為零,則不再允許使用 _ 初始化記錄欄位。

    自身 ID:OTP-16516

  • 修正 eval_bits 中的錯誤。

    自身 ID:OTP-16545

改進和新功能

  • 改善了 STDLIB 和 Kernel 中大多數 OTP 行為的單行記錄器事件的列印。這包括 proc_libgen_servergen_eventgen_statemgen_fsmsupervisorsupervisor_bridgeapplication

    改善了 proc_lib 以及格式化例外狀況時,chars_limitdepth 的處理方式。

    自身 ID:OTP-15299

  • 移除 I/O 協定舊要求的用法和文件。

    自身 ID:OTP-15695

  • 改進了並行呼叫時的 ETS 可擴展性,這些呼叫會變更表格大小,例如 ets:insert/2ets:delete/2

    此效能功能已在 OTP 22.0 中針對 ordered_set 實作,現在適用於所有 ETS 表格類型。

    改進的可擴展性可能會導致 ets:info(T,size)ets:info(T,memory) 的延遲時間較長。因此,新增了一個新的表格選項 decentralized_counters。對於啟用 write_concurrencyordered_set,其預設值為 true,對於所有其他表格類型,其預設值為 false

    自有 ID:OTP-15744 輔助 ID:OTP-15623,PR-2229

  • zip 模組中處理 Unicode 檔名。

    自有 ID:OTP-16005 輔助 ID:ERL-1003,ERL-1150

  • Unicode 支援已更新至 Unicode 12.1 標準。

    自有 ID:OTP-16073 輔助 ID:PR-2339

  • 所有的模組 proc_libgen_servergen_statemgen_event 都已擴充 start_monitor() 函式。如需詳細資訊,請參閱這些模組的 start_monitor() 文件。

    自有 ID:OTP-16120 輔助 ID:ERIERL-402,PR-2427

  • 更新了新的 erlang:term_to_iovec() BIF。

    自有 ID:OTP-16128 輔助 ID:OTP-15618

  • 記錄了有關從 erl_tar 中的檔案描述符提取的特性。

    自有 ID:OTP-16171 輔助 ID:ERL-1057

  • 新增 ok 作為 gen_server:reply/2 的傳回值

    自有 ID:OTP-16210 輔助 ID:PR-2411

  • 已在 c 中新增函式,用於列印 Erlang 模組的內嵌文件。這些函式為:

    • h/1,2,3 - 列印模組:函式/Arity 的文件。

    • ht/1,2,3 - 列印模組:類型/Arity 的類型文件。

    內嵌文件是在建立 Erlang/OTP 文件時建立的。

    自有 ID:OTP-16222

  • indentlinewidth 新增至 erl_pp 模組函式的選項中。

    自有 ID:OTP-16276 輔助 ID:PR-2443

  • 由於進行了新的 spawn 改進,因此進行了一些小更新。

    自有 ID:OTP-16368 輔助 ID:OTP-15251

  • 現在,當在載入 NIF 的模組中使用內聯時,編譯器會發出警告。

    自有 ID:OTP-16429 輔助 ID:ERL-303

  • 重構了已棄用和已移除函式的內部處理方式。

    自有 ID:OTP-16469

  • 擴充 erl_parse:abstract/1,2 以處理外部函式表示式 (fun M:F/A)。

    自有 ID:OTP-16480

  • 新增 filelib:safe_relative_path/2 以取代 filename:safe_relative_path/1,後者無法安全地處理符號連結。

    filename:safe_relative_path/1 已被棄用。

    自有 ID:OTP-16483 輔助 ID:PR-2542

  • 已新增模組 shell_docs。此模組包含用於呈現、驗證和正規化內嵌文件的函式。

    自有 ID:OTP-16500

  • Shell 中的模組和函式自動完成現在會查看所有可用的模組,而不是僅限於已載入的模組。如果模組已載入,或在呼叫時會載入,則會將其視為可用。

    自動完成也已擴充到可在 c 中新的 h/1,2,3 函式中使用。

    自有 ID:OTP-16501 輔助 ID:OTP-16494、OTP-16222、OTP-16406、OTP-16499、OTP-16500、PR-2545、ERL-708

  • 將內部 pcre 程式庫更新至 8.44

    自有 ID:OTP-16557

STDLIB 3.12.1.2

修正的錯誤和故障

  • 修正一個錯誤,該錯誤可能導致使用控制序列 pP 格式化元組並使用選項 chars_limit 限制輸出時發生當機。

    自有 ID:OTP-17525 輔助 ID:GH-5053

STDLIB 3.12.1.1

修正的錯誤和故障

  • 修正了一個當使用控制序列 p 或 P 格式化詞語,並使用 chars_limit 選項限制輸出時,可能導致迴圈的錯誤。

    自有 ID:OTP-17459 輔助 ID:GH-4824, GH-4842

STDLIB 3.12.1

修正的錯誤和故障

  • [re:run(Subject, RE, [unicode])](re:run/3) 在 Subject 包含非法的 utf8 且 RE 以二進位形式傳遞時,傳回 nomatch 而不是使用 badarg 錯誤例外狀況失敗。已修正此問題,同時修正了 re:run() 錯誤案例中的歸約計數。

    自有 ID:OTP-16553

STDLIB 3.12

修正的錯誤和故障

  • 修正 uri_string:normalize/2 的類型規格,該規格也可能傳回 error()。

    自有 ID:OTP-16322

  • 改進 uri_string:normalize/2 中的錯誤處理。此變更修正了輸入 URI 具有錯誤百分比編碼時的崩潰問題。

    自有 ID:OTP-16351

  • 修正 Erlang 美化列印器中的小錯誤 (erl_pp)。

    自有 ID:OTP-16435

  • 修正 Erlang 分析器中關於連續一元運算子的問題。

    自有 ID:OTP-16439

  • calendar:rfc3339_to_system_time() 在缺少時間偏移時崩潰。

    自有 ID:OTP-16514 輔助 ID:ERL-1182

改進和新功能

  • 實作 uri_string:resolve/{2,3},可用於解析相對於基礎 URI 的 URI 參考。

    自有 ID:OTP-16321

  • gen_statem 中,現在可以變更執行中伺服器的回呼模組。請參閱 gen_statem 的文件,瞭解 change_callback_modulepush_callback_modulepop_callback_module

    自有 ID:OTP-16477 輔助 ID:PR-2531

STDLIB 3.11.2

修正的錯誤和故障

  • 已在 erl_tar 中消除目錄遍歷漏洞。erl_tar 現在會拒絕提取指向目標提取目錄外部的符號連結,並傳回 {error,{Path,unsafe_symlink}}。(感謝 Eric Meadows-Jönsson 提供錯誤報告和建議修正。)

    自有 ID:OTP-16441

STDLIB 3.11.1

修正的錯誤和故障

  • 當給定啟用 write_concurrency 的 ordered_set 和無效位置時,ets:update_counter/4 核心傾印。此錯誤已修正。

    自有 ID:OTP-16378 輔助 ID:ERL-1125

STDLIB 3.11

修正的錯誤和故障

  • 當傳入非常大的無效程式碼點作為輸入時,函式 unicode:characters_to_list()unicode:characters_to_binary() 引發 badarg 例外狀況,而不是傳回錯誤 tuple。

    自有 ID:OTP-16052

  • 修正了程式碼檢查器中的錯誤,其中清單和二進位推導可能會抑制不安全的變數錯誤。

    自有 ID:OTP-16053 輔助 ID:ERL-1039

  • 修正了 erl_tar:open/2create/2,3add/4 的錯誤類型規格。

    自有 ID:OTP-16085 輔助 ID:PR-2379

  • 修正了 binary:list_to_bin/1 的錯誤類型規格。引數類型已從 iodata/0 變更為 iolist/0

    自有 ID:OTP-16132 輔助 ID:ERL-1041

  • 修正了 pool:pspawn_link 中的競爭條件,該條件會導致在使用它來產生非常短暫的程序時擲回 noproc 錯誤。

    自有 ID:OTP-16211

  • 修正了 ETS 查閱中,在使用 compressed 選項且 term 包含原子時的效能問題。在此修正之前,原子的解壓縮演算法會不必要地採用全域鎖定來驗證原子。

    自有 ID:OTP-16316

改進和新功能

  • 新增了一個新的編譯器/程式碼檢查器選項,可停用未使用類型的警告 (nowarn_unused_type)。

    自有 ID:OTP-16262 輔助 ID:ERIERL-435

  • 已最佳化 ETS 表格,使其在只啟用一個排程器的系統中執行時不使用任何鎖定。這可以為大量使用 ETS 表格的應用程式提供顯著的效能提升。

    自有 ID:OTP-16315

STDLIB 3.10

修正的錯誤和故障

  • 現在,當在大型主體中驗證 utf8 時,re:run() 會產生結果。

    自有 ID:OTP-15836 輔助 ID:ERL-876

  • 將 ERTS 內部 PCRE 程式庫從 8.42 版升級到 8.43 版。如需有關 PCRE 變更的資訊,請參閱 http://pcre.org/original/changelog.txt。此程式庫實作了 re 正則表示式模組的主要部分。

    自有 ID:OTP-15889

  • 已修正 ID 為 ERL-717 的錯誤。在此修正之前,函式 io:columns()io:rows() 僅在互動式 erlang Shell 內才能正常運作。即使 stdout 和 stdin 連接到終端機,這些函式也會傳回 {error,enotsup},如果從 escript 或使用 (例如) erl -noshell 啟動的程式叫用這些函式的話。

    自有 ID:OTP-15959 輔助 ID:ERL-717

  • 修正了萬用字元中「..」和「@」的處理方式。「..」僅在前面加上文字模式 (例如「a/..」) 時才能運作,而在前面加上萬用字元 (例如「*/..」) 時則無法運作。「@/..」的組合也中斷了,此外,模式中的「@」可能會降低萬用字元比對的效能。

    自有 ID:OTP-15987 輔助 ID:ERL-1029

  • 確保從 Shell 呼叫時,ets:fun2ms() 可以處理函式標頭中的 ++/2

    自有 ID:OTP-15992 輔助 ID:PR-2322

改進和新功能

  • 改進了 gen_statem 中逾時的除錯功能。現在,啟動逾時會記錄在 sys:logsys:trace 中。執行中的逾時會在伺服器當機記錄中顯示,並可透過 sys:get_status 查看。由於此系統事件,新增了 {start_timer, Action, State}{insert_timout, Event, State},這可能會讓依賴這些事件格式的工具感到意外。

    新功能:可以使用 {TimeoutType, update, NewEventContent} 更新執行中逾時的 EventContent。可以使用 {TimeoutType, cancel} 取消執行中的逾時,這比使用 Time = infinity 更易讀。

    * 潛在的不相容性 *

    自身 ID:OTP-15510

  • re:run() 現在避免在同一次呼叫中多次驗證主體的 utf8。先前,在傳遞 global 選項時,可能會多次執行此驗證。

    自身 ID:OTP-15831,輔助 ID:ERL-876

  • 已修復啟用 write_concurrency 的 ETS ordered_set 表格的效能問題。在此修正之前,內部統計計數器的值沒有限制。這可能導致資料結構有時對使用它的平行處理程序數量變化反應遲緩。

    自身 ID:OTP-15906

  • 當傳遞長長的 ordsets 列表時,現在 ordsets:union/1 的速度更快了。

    自身 ID:OTP-15927

  • unicode:characters_to_binary() 可能會傳回非常小的二進位檔案作為參考計數的堆外二進位檔案。這可能會導致不必要的記憶體使用量過大,以及二進位配置器不必要的負擔。現在,小的二進位檔案一律以堆積二進位檔案的形式傳回。

    自身 ID:OTP-16002,輔助 ID:ERIERL-366

  • 當在 Erlang 中編寫的腳本 (escript) 中使用錯誤的 I/O 伺服器時,會顯示更有意義的錯誤訊息。

    自身 ID:OTP-16006,輔助 ID:ERL-992

  • 新功能 ets:info(_, binary) 可取得表格保留的所有參考計數二進位檔案的相關資訊。這與 process_info(_, binary) 為處理程序傳回的偵錯資訊相同。

    自身 ID:OTP-16035,輔助 ID:ERIERL-366

  • 修正了有關透過外部格式序列化時編譯比對規格行為的 ETS 文件。

    自身 ID:OTP-16038,輔助 ID:PR-2366

STDLIB 3.9.2

已修正的錯誤和故障

  • 修正了使用控制序列 pP 格式化詞語,並使用 chars_limit 選項限制輸出時,可能會導致迴圈的錯誤。

    自身 ID:OTP-15875,輔助 ID:ERL-967

STDLIB 3.9.1

已修正的錯誤和故障

  • 修正了使用控制序列 pP 格式化二進位檔案,並使用 chars_limit 選項限制輸出時,可能會導致失敗的錯誤。

    自身 ID:OTP-15847,輔助 ID:ERL-957

STDLIB 3.9

已修正的錯誤和故障

  • 修正了 string:lexemes/2 中的錯誤。

    此錯誤是在最佳化 string 模組中處理深層 Unicode 字元列表時發現的。

    自身 ID:OTP-15649

  • 已修正 maps 實作中的錯誤,此錯誤可能會導致當機或記憶體使用量不斷成長,直到機器耗盡記憶體。當將包含二進位 B1 的新鍵值組以索引鍵 K1 插入到具有二進位 B2 的索引鍵 K2 的映射 M 中,且符合以下條件時,可能會發生這種情況:

    • B1 =/= B2
    • size(B1) >= 4294967296
    • size(B2) >= 4294967296
    • size(M) >= 32
    • (size(B1) rem 4294967296) == (size(B2) rem 4294967296)
    • B1B2 中的前 (size(B1) rem 4294967296) 個位元組相同
    • K1 中將 B1 替換為 B2 會建立與 K2 值相同的詞語

    此問題的根本原因在於 maps 實作只雜湊二進位檔案的前 (X rem 4294967296) 個位元組,因此不同的二進位檔案可能會取得相同的雜湊值,與雜湊種子無關。

    自身 ID:OTP-15707

  • 自引入堆疊追蹤變數後,即使無法省略堆疊追蹤變數,Erlang 美觀列印器也會省略例外類別 throw,這並不是正確的 Erlang 程式碼。修正方法是始終包含例外類別 throw

    自身 ID:OTP-15751

  • record_info/2 是一個需要編譯時已知的文字引數的虛擬函式。因此,以下用法是不合法的:fun record/info/2。編譯此類程式碼時,編譯器會當機。已更正為發出編譯錯誤。

    自身 ID:OTP-15760,輔助 ID:ERL-907

改進和新功能

  • 實作了新的 rand 模組演算法 exro928ss (Xoroshiro928**)。它具有非常長的週期和所有輸出位元的良好統計品質,同時速度僅比預設演算法慢約 50%。

    相同的產生器也用作 rand 模組的新 crypto 外掛程式中的長週期計數器,演算法為 crypto_aes。此外掛程式使用 AES-256 來擾亂計數器,以掩蓋任何可偵測的統計異常。擾亂是分塊完成的,並快取這些分塊以取得良好的攤銷速度(約為預設演算法的一半)。

    自身 ID:OTP-14461,輔助 ID:PR-1857

  • 與伺服器命名和啟動相關的類型已從 gen_statem 中匯出。這些類型為:server_name/0server_ref/0start_opt/0start_ret/0enter_loop_opt/0

    自身 ID:OTP-14724,輔助 ID:PR-2056

  • rand 模組的預設演算法已變更為 exsss (Xorshift116**),它是 Xorshift116 (exsp) 狀態更新和 David Blackman 和 Sebastiano Vigna 在 2018 年論文「擾亂線性虛擬隨機數字產生器」中的新擾亂器「StarStar」的組合。這種組合不應具有先前預設演算法具有的低位元弱點,代價是速度降低約 10%。請參閱 GitHub pull request #1969。

    自身 ID:OTP-14731,輔助 ID:PR-1969

  • 儘管已拒絕 GitHub Pull Request #1855,但泛型狀態機行為 gen_statem 已從該請求中獲得程式碼清除和文件改進。

    自身 ID:OTP-14737,輔助 ID:PR-1855

  • 將 Unicode 規格更新為 11.0 版。

    自身 ID:OTP-15111

  • ETS 選項 write_concurrency 現在也會影響並改進 ordered_set 表格的可擴展性。此實作基於稱為爭用調整搜尋樹的資料結構,其中鎖定粒度會調整為應用程式在執行時間中利用的實際並行量。

    自身 ID:OTP-15128

  • 使用瑣碎的 Erlang 實作最佳化 maps:new/0,利用不需要動態堆積配置的文字詞語(空的映射)。

    自身 ID:OTP-15200,輔助 ID:PR-1878

  • 已變更 gen_* 行為,因此如果伺服器啟用透過 sys:log/2,3 記錄的最後 N 則訊息,則此記錄會包含在終止報告中。

    為了實現這一點,已澄清並清除 sys 手冊頁中定義的「系統事件」格式,新增了函式 sys:get_log/1,並棄用了 sys:get_debug/3。由於這些變更,依賴「系統事件」內部未明確記錄格式的程式碼需要進行更正。

    * 潛在的不相容性 *

    自身 ID:OTP-15381

  • 已最佳化 gen_statem 行為引擎迴圈,以獲得更好的效能,尤其是在回呼模組傳回某些動作時,這表示更實際的應用程式比 Echo Benchmark 的效能更好。

    自身 ID:OTP-15452

  • 不允許將函式規格用於駐留在其他模組中的函式。

    * 潛在的不相容性 *

    自身 ID:OTP-15563,輔助 ID:ERL-845, OTP-15562

  • persistent_term 函式 put/2erase/1 現在會產生結果。

    自身 ID:OTP-15615

  • 先前,所有 ETS 表格都使用集中式計數器變數來追蹤儲存的項目數和消耗的記憶體量。這些計數器可能會導致擴展性問題(尤其是在大型 NUMA 系統上)。此變更新增了分散式計數器的實作,並修改了 ETS 的實作,以便啟用 write_concurrencyordered_set 類型的 ETS 表格使用分散式計數器。實驗顯示,在頻繁的 ets:insert/2ets:delete/2 呼叫的案例中,此變更大幅提高了啟用 write_concurrency 的 ETS ordered_set 表格的可擴展性。

    自身 ID:OTP-15623,輔助 ID:PR-2190

  • 使用 ssh 而非 rsh 作為預設遠端殼層。

    自身 ID:OTP-15633,輔助 ID:PR-1787

  • 新增 beam_lib:strip/2 和相關函式,它們接受一個在剝離時應保留的區塊清單。

    自身 ID:OTP-15680,輔助 ID:PR-2114

  • 最佳化使用 io_lib:write() 列印映射。此外,當使用 chars_limit 選項限制輸出時,也最佳化字串的美觀列印 (~s~ts)。

    自身 ID:OTP-15705

  • 新增了編譯器選項 nowarn_removed{nowarn_removed,Items},用來抑制從 OTP 中移除的函數和模組的警告。

    專屬 ID:OTP-15749 輔助 ID:ERL-904

  • 讓 Erlang Pretty Printer 將原子部分放在同一行。

    專屬 ID:OTP-15755

  • 在 Erlang Pretty Printer 的函數中新增 quote_singleton_atom_types 選項。將此選項設定為 true 會在所有單例原子類型加上引號。

    專屬 ID:OTP-15756

STDLIB 3.8.2.4

修正錯誤和故障

  • [re:run(Subject, RE, [unicode])](re:run/3) 在 Subject 包含非法的 utf8 且 RE 以二進位形式傳遞時,傳回 nomatch 而不是使用 badarg 錯誤例外狀況失敗。已修正此問題,同時修正了 re:run() 錯誤案例中的歸約計數。

    自有 ID:OTP-16553

STDLIB 3.8.2.3

修正錯誤和故障

  • 已在 erl_tar 中消除目錄遍歷漏洞。erl_tar 現在會拒絕提取指向目標提取目錄外部的符號連結,並傳回 {error,{Path,unsafe_symlink}}。(感謝 Eric Meadows-Jönsson 提供錯誤報告和建議修正。)

    自有 ID:OTP-16441

STDLIB 3.8.2.2

修正錯誤和故障

  • 修正了使用控制序列 pP 格式化詞語,並使用 chars_limit 選項限制輸出時,可能會導致迴圈的錯誤。

    自身 ID:OTP-15875,輔助 ID:ERL-967

STDLIB 3.8.2.1

修正錯誤和故障

  • 修正了使用控制序列 pP 格式化二進位檔案,並使用 chars_limit 選項限制輸出時,可能會導致失敗的錯誤。

    自身 ID:OTP-15847,輔助 ID:ERL-957

STDLIB 3.8.2

修正錯誤和故障

  • 修正了 gen_statem 中的一個錯誤,由於不正確地使用非同步計時器取消,內部逾時訊息可能會在高負載期間以 info 的形式到達回呼模組。

    專屬 ID:OTP-15295

STDLIB 3.8.1

修正錯誤和故障

  • 修正了以 compressed 標誌開啟檔案時讀取檔案的效能衰退問題。

    專屬 ID:OTP-15706 輔助 ID:ERIERL-336

STDLIB 3.8

修正錯誤和故障

  • 修正了 Erlang Pretty Printer 中的一個錯誤:長原子名稱與 <<>> 組合可能會導致崩潰。

    專屬 ID:OTP-15592 輔助 ID:ERL-818

  • 修正了當使用控制序列 pP 格式化字元列表,並使用 chars_limit 選項限制輸出時,可能導致錯誤結果或不良效能的錯誤。

    專屬 ID:OTP-15639

改進和新功能

  • 改進了關於安全表格遍歷以及 ordered_set 的部分綁定鍵優化的 ETS 文件。

    專屬 ID:OTP-15545 輔助 ID:PR-2103、PR-2139

  • 優化 calendar:gregorian_days_to_date/1

    專屬 ID:OTP-15572 輔助 ID:PR-2121

  • 優化函數 calendar:rfc3339_to_system_time()calendar:system_time_to_rfc3339()

    專屬 ID:OTP-15630

STDLIB 3.7.1

修正錯誤和故障

  • 優化術語的漂亮列印。較慢的行為是在 Erlang/OTP 20 中引入的。

    專屬 ID:OTP-15573 輔助 ID:ERIERL-306

STDLIB 3.7

修正錯誤和故障

  • 在匹配規範中記錄 bit_size,並允許在 ets:fun2ms 中使用。

    專屬 ID:OTP-15343 輔助 ID:PR-1962

  • beam_lib 中的 beam() 類型定義為 module() | file:filename() | binary()module/0 具有誤導性。如果 BEAM 檔案位於目前目錄中,則將模組名稱作為原子傳遞才會有效。

    為了避免混淆,已從類型中刪除 module/0。這表示對於將原子作為檔名呼叫 beam_lib 的程式碼,將會有 Dialyzer 警告,但這些呼叫仍然可以運作。

    專屬 ID:OTP-15378 輔助 ID:ERL-696

  • unicode_util 在二進位字串中的某些 emoji 字素群集上崩潰。

    專屬 ID:OTP-15428 輔助 ID:ERL-777

  • 當使用外部函式時,可能會抑制未使用變數的警告。

    專屬 ID:OTP-15437 輔助 ID:ERL-762

  • 修正 lists:member/2 中的縮減計數

    專屬 ID:OTP-15474 輔助 ID:ERIERL-229

改進和新功能

  • 指定時,+{source,Name} 選項現在會覆蓋堆疊追蹤中的實際檔案名稱,而不是僅影響 Mod:module_info() 的傳回值。

    +deterministic 標誌現在也會影響堆疊追蹤,省略除了檔案名稱之外的所有路徑資訊,從而修正了需要確定性路徑的確定性組建的長期問題。

    專屬 ID:OTP-15245 輔助 ID:ERL-706

  • 列表相減(-- 運算子)現在會在大型輸入上產生正確的結果。

    專屬 ID:OTP-15371

  • calendar:system_time_to_rfc3339/1,2 不再從分數中移除尾隨零。

    專屬 ID:OTP-15464

STDLIB 3.6

修正錯誤和故障

  • 修正了 filename:basedir/2,3 的規範。

    專屬 ID:OTP-15252 輔助 ID:ERL-667

改進和新功能

  • 如果給定原始檔名(二進位),則讓 dets:open_file()badarg 訊息結束。

    專屬 ID:OTP-15253 輔助 ID:OTP-13229、ERL-55

  • 即使 ioio_lib 模組中的格式化函數的 Format 引數是二進位列表之類的列表,也會接受它。這是在 Erlang/OTP 21.0 之前的情況。

    專屬 ID:OTP-15304

STDLIB 3.5.1

修正錯誤和故障

  • 修正了當使用控制序列 pP 格式化非字元列表,並使用 chars_limit 選項限制輸出時,可能導致崩潰的錯誤。

    專屬 ID:OTP-15159

STDLIB 3.5

修正錯誤和故障

  • gen_statem 的改進。

    當使用在狀態進入呼叫中有效但不允許的例外狀況時,原因已從 {bad_action_from_state_function,Action} 變更為 {bad_state_enter_action_from_state_function,Action}

    改進了計時器剖析。許多錯誤的逾時元組未正確處理。

    文件已更新,尤其是使用者指南,並且從參考手冊到使用者指南的指標更加明顯。

    專屬 ID:OTP-14015

  • 已根據檔案和 socket 操作應該能夠傳回的錯誤,更新了 file:posix/0inet:posix/0 的類型規格。

    專屬 ID:OTP-14019 輔助 ID:ERL-550

  • 檔案操作過去接受包含空字元(整數值為零)的 檔名。這導致名稱被截斷,並且在某些情況下,原始操作的引數被混淆。現在拒絕包含空字元的檔名,並會導致原始檔案操作失敗。

    此外,環境變數操作過去接受包含空字元(整數值為零)的環境變數的名稱。這導致操作靜默產生錯誤的結果。現在拒絕包含空字元的環境變數名稱和值,並會導致環境變數操作失敗。

    原始環境變數操作也過去接受環境變數名稱中的 $= 字元,導致各種問題。現在也拒絕環境變數名稱中的 $= 字元。

    此外,os:cmd/1 現在拒絕其 命令中的空字元。

    erlang:open_port/2 從現在起也將拒絕連接埠名稱中的空字元。

    * 潛在的不相容性 *

    專屬 ID:OTP-14543 輔助 ID:ERL-370

  • io_lib:unscan_format/1 能夠使用 pad char 和預設精度。

    專屬 ID:OTP-14958 輔助 ID:PR-1735

  • 控制序列修飾符 tl 可以在同一個控制序列中一起使用,這使得可以同時擁有 Unicode 原子,並且不偵測可列印字元列表。

    專屬 ID:OTP-14971 輔助 ID:PR-1743

  • 修正 Erlang 程式碼檢查工具中的一個錯誤:當使用 map 語法時,guard 運算式的檢查不再回傳 false。此錯誤影響了 Erlang shell、除錯器和其他評估抽象程式碼的模組。

    自有 ID:OTP-15035 輔助 ID:ERL-613

  • 類型為 {Fun,State} 的系統除錯函式不應允許重複安裝。然而,如果目前的 State 為 'undefined' 時,會被誤認為函式不存在而允許重複安裝。此問題已修正。

    自有 ID:OTP-15049

  • 修正 io:putchars/2 在發生錯誤時的堆疊追蹤重寫,使其指向有效的函式。

    自有 ID:OTP-15101

改進與新功能

  • gen_server 新增了一個新的回呼函式 handle_continue/2,用於檢查點狀態。這在至少實作基於 gen_server 的行為時,以及在某些啟動情境中非常有用。

    自有 ID:OTP-13019 輔助 ID:PR-1490

  • gen_statem:call/3 的 timeout 參數 {clean_timeout,infinity} 的語意已變更為使用代理程序進行呼叫。透過此變更,clean_timeout 隱含使用一個沒有例外狀況的代理程序。這可能是一個難以察覺的不相容性:在發生網路問題時,如果捕獲錯誤,延遲的回覆可能會出現在呼叫者的訊息佇列中。此修正後,將不會發生這種情況。

    timeout 參數 infinity 的語意並未變更。

    * 潛在的不相容性 *

    自有 ID:OTP-13073 輔助 ID:PR-1595

  • Erlang/OTP 新增了一個新的日誌 API,請參閱 logger 手冊頁面,以及 Kernel 使用者指南中的 日誌 章節。

    error_logger 的呼叫會自動重新導向至新的 API,而舊有的錯誤日誌處理程序仍然可以使用。然而,建議在撰寫新程式碼時直接使用 Logger API。

    請注意以下潛在的不相容性

    • 核心組態參數 error_logger 仍然有效,但如果預設處理程序的輸出目的地是使用核心組態參數 logger 設定的,則會被覆寫。

      一般來說,用於設定錯誤日誌的參數會被用於設定 Logger 的新參數覆寫。

    • SASL 錯誤日誌的概念已被棄用,這表示預設情況下,SASL 應用程式不會影響記錄哪些日誌事件。

      預設情況下,Supervisor 報告和當機報告會由核心啟動的預設 Logger 處理程序記錄,並與來自 Erlang/OTP 的其他標準日誌事件一起輸出至相同的目的地(終端機或檔案)。

      進度報告預設不會記錄,但可以將主要日誌層級設定為 info 來啟用,例如使用核心組態參數 logger_level

      若要取得與早期版本 SASL 錯誤日誌功能的回溯相容性,請將核心組態參數 logger_sasl_compatible 設定為 true。這會防止預設的 Logger 處理程序記錄任何 Supervisor、當機或進度報告。相反地,SASL 會在應用程式啟動期間新增一個單獨的 Logger 處理程序,負責處理這些日誌事件。SASL 組態參數 sasl_error_loggersasl_errlog_type 會指定這些事件的記錄目的地(終端機或檔案)和嚴重性層級。

    由於 Logger 是 Erlang/OTP 21.0 的新功能,我們保留在後續的修補程式中對 Logger API 和功能進行變更的權利。這些變更可能會或可能不會與初始版本向後相容。

    * 潛在的不相容性 *

    自有 ID:OTP-13295

  • 新增函式 calendar:system_time_to_local_time/2calendar:system_time_to_universal_time/2

    自有 ID:OTP-13413

  • 新增函式 rand:uniform_real/0rand:uniform_real_s/1。它們產生在範圍 0.0 =< X < 1.0 內均勻分佈的數字,這些數字與正規化 IEEE 754 雙精度允許的隨機實數盡可能接近。由於隨機實數正好為 0.0 的機率為無限小,它們永遠不會回傳正好 0.0

    當您需要在隨機值 X 上呼叫例如 math:log(X)1 / X 時,這些屬性非常有用,因為使用這些新函式產生的數字永遠不會失敗。

    自有 ID:OTP-13764 輔助 ID:PR-1574

  • 新增 maps:iterator/0 和 maps:next/1,用於迭代 map 中的鍵值關聯。

    自有 ID:OTP-14012

  • 變更 .erlang 載入的預設行為:不再從目前目錄載入 .erlangc:erlangrc(PathList) 可用於從使用者指定的目錄中搜尋和載入 .erlang 檔案。

    escripterlcdialyzertyper 完全不再載入 .erlang

    * 潛在的不相容性 *

    自有 ID:OTP-14439

  • stdlib 新增新的 uri_string 模組,用於處理 URI (RFC 3986)。

    自有 ID:OTP-14496

  • 將 Unicode 規格更新至 10.0 版。

    自有 ID:OTP-14503

  • filelib:wildcard() 現在允許使用反斜線跳脫具有特殊意義的字元。

    這是一個不相容的變更,但請注意,在萬用字元中使用反斜線在 Windows 和 Unix 上已經會有不同的運作方式。現有對 filelib:wildcard() 的呼叫需要更新。在 Windows 上,目錄分隔符號必須一律寫成斜線。

    * 潛在的不相容性 *

    自有 ID:OTP-14577

  • Supervisor 現在將其子規範儲存在 map 中,而非清單中。當在非 simple_one_for_one Supervisor 下啟動許多子程序時,這會帶來顯著的效能提升。

    自有 ID:OTP-14586

  • 最佳化 base64 模組。

    請注意,除非以文件化的類型呼叫,否則函式 encode/1decode/1mime_decode/1 會失敗。它們過去接受任何 iodata/0

    自有 ID:OTP-14624 輔助 ID:PR-1565

  • 新增函式 lists:search/2

    自有 ID:OTP-14675 輔助 ID:PR-102

  • uri_string 模組擴充了用於處理基於 HTML5 規格的 application/x-www-form-urlencoded 查詢字串的函式。

    自有 ID:OTP-14747

  • 新增函式 calendar:rfc3339_to_system_time/1,2calendar:system_time_to_rfc3339/1,2

    自有 ID:OTP-14764

  • erl_eval 模組函式回傳的堆疊追蹤更準確地反映了發生例外狀況的位置。

    自有 ID:OTP-14826 輔助 ID:PR 1540

  • 將選項 atimemtimectimeuidgid 新增至 erl_tar:add/3,4 函式。

    自有 ID:OTP-14834 輔助 ID:PR 1608

  • 新增 ets:whereis/1,用於擷取具名表格的表格識別碼。

    自有 ID:OTP-14884

  • 改進 uri_string 模組中的 URI 正規化函式。

    自有 ID:OTP-14910

  • 新函式 io_lib:fwrite/3io_lib:format/3 接受第三個引數,即選項清單。唯一的選項是 chars_limit,用於限制回傳字元的數量。此限制是軟性的,表示回傳字元的數量最多會超過限制一小部分。如果設定了限制,則函式 format/3fwrite/3 會嘗試將字元的數量均勻分佈在控制序列 pPswW 上。此外,控制序列 pPwP 會嘗試將字元的數量均勻分佈在子結構上。

    控制序列 pPwW 的一個修改是,即使回傳字元的數量沒有限制,map 的所有關聯都會列印到相同的深度。目標是提供更一致的輸出,因為 map 鍵的順序未定義。與之前一樣,如果深度小於 map 的關聯數量,則要列印的關聯選擇是任意的。

    自有 ID:OTP-14983

  • 新增函式 ordsets:is_empty/1sets:is_empty/1

    自有 ID:OTP-14996 輔助 ID:ERL-557, PR-1703

  • 改進處理 ASCII 字元時 string:uppercase/1string:lowercase/1string:casefold/1 的效能。

    自有 ID:OTP-14998

  • 模組、名稱和算數 (例如 erlang:abs/1) 具有字面值的外部函式現在被視為字面值。這表示更有效率的程式碼,並在堆積上產生較少的垃圾。

    自有 ID:OTP-15003

  • sys:statistics(Pid,get) 未回報來自 gen_server 的 'out' 訊息。此問題已修正。

    自有 ID:OTP-15047

  • 系統除錯函式現在除了舊有的 {Fun,State} 格式外,還可以具有 {Id,Fun,State} 格式。這允許安裝多個除錯函式執行個體。

    自有 ID:OTP-15048

  • 移除 lib 模組

    • 移除 lib:error_message/2
    • 移除 lib:flush_receive/0
    • 移除 lib:nonl/1
    • lib:progname/0 已被 ct:get_progname/0 取代。
    • 移除 lib:send/2
    • 移除 lib:sendw/2

    * 潛在的不相容性 *

    自有 ID:OTP-15072 輔助 ID:PR 1786, OTP-15114

  • 函式 ets:delete_all_objects/1 現在會針對需要大量時間清除的大型表格產生排程器執行緒。這是為了改善其他可執行程序的即時特性。

    自有 ID:OTP-15078

  • 在包含 pP 的函式 io:fwrite/2,3io_lib:fwrite/2,3 的控制序列中,欄位寬度值為 0 表示不插入換行符號。這與舊行為相反,舊行為中 0 會在每個子項之後插入換行符號。若要在每個子項之後插入換行符號,可以使用欄位寬度值 1

    * 潛在的不相容性 *

    自有 ID:OTP-15103 輔助 ID:ERL-607

STDLIB 3.4.5.1

改進與新功能

  • 列表相減(-- 運算子)現在會在大型輸入上產生正確的結果。

    專屬 ID:OTP-15371

STDLIB 3.4.5

修正的錯誤與故障

  • gen_statem 中的 Module:init/1 函式可能會回傳包含任何動作的動作列表,但錯誤的檢查只允許狀態進入動作,因此例如 {next_event,internal,event} 會導致伺服器崩潰。此錯誤已修正。

    自有 ID:OTP-13995

STDLIB 3.4.4

修正的錯誤與故障

  • 更正 filelib:find_source()filelib:find_file(),使其預設也會在 src 下一層目錄中搜尋。這符合設計原則,該原則指出應用程式可以在 src 目錄下一層擁有 Erlang 原始碼檔案。

    自有 ID:OTP-14832 輔助 ID:ERL-527

  • 更正了 erl_tar:table/2 的合約。

    自有 ID:OTP-14860 輔助 ID:PR 1670

  • 修正一些合約。

    自有 ID:OTP-14889

  • 修正 string:prefix/2,使其能夠處理第二個參數為空字串的情況。

    自有 ID:OTP-14942 輔助 ID:PR-1702

STDLIB 3.4.3

修正的錯誤與故障

  • 使 ets:i/1 在瀏覽表格時輸入 ^D 時能更乾淨地退出。只有舊的 Erlang shell 會受到影響(erl 旗標 -oldshell)。

    自有 ID:OTP-14663

  • 修正了模組 filename 中 Windows UNC 路徑的處理方式。

    自有 ID:OTP-14693

改進與新功能

  • 改善處理 ASCII 字元時,新字串功能的效能。

    自有 ID:OTP-14670

  • unicode:characters_to_list/2 的文件新增了說明。

    自有 ID:OTP-14798

STDLIB 3.4.2

修正的錯誤與故障

  • 修正在 Erlang shell 中的一個錯誤,其中具有類型欄位的遞迴定義記錄可能會導致迴圈。

    自有 ID:OTP-14488 輔助 ID:PR-1489

  • 使 edlin 處理字素叢集而不是碼點,以改善多碼點字元的處理。

    自有 ID:OTP-14542

  • 當使用多個 catch 子句時,可能會對在 try 區塊之外使用 erlang:get_stacktrace/0 產生錯誤的警告。

    自有 ID:OTP-14600 輔助 ID:ERL-478

改進與新功能

  • Erlang 程式碼檢查器不再檢查在 nowarn_deprecated_function 選項中提及的函式是否在模組中宣告。

    自有 ID:OTP-14378

  • 一般 Unicode 改進。

    自有 ID:OTP-14462

STDLIB 3.4.1

修正的錯誤與故障

  • 修正了 Erlang/OTP 20.0 中引入的 proc_lib:format() 中的一個錯誤。

    自有 ID:OTP-14482 輔助 ID:PR-1488

  • 修正 string:len/1,使其與先前版本相容。

    自有 ID:OTP-14487 輔助 ID:ERIERL-40

  • 在 OTP-20.0 中,c、make 和 ct_make 的行為已變更,因此在某些情況下,beam 檔案預設會寫入找到原始碼檔案的目錄。現在已將其變更回舊行為,因此 beam 檔案預設會寫入目前目錄。

    自有 ID:OTP-14489 輔助 ID:ERL-438

STDLIB 3.4

修正的錯誤與故障

  • 在許多版本中,使用具有相同名稱的本地函式覆蓋 BIF 是合法的。但是,在列表理解中將與 guard BIF 同名的本地函式作為篩選器是不允許的。

    自有 ID:OTP-13690

  • rand 模組中實作了一個新的(預設)偽隨機數產生器演算法 Xoroshiro116+。

    舊的演算法實作存在許多缺陷,因此它們都已棄用,但已新增兩個修正版本。請參閱文件。

    自有 ID:OTP-14295 輔助 ID:PR-1372

  • Erlang shell、qlc:string_to_handle() 和除錯器(繫結區域的評估器區域和編輯變數視窗)可以剖析 pid、port、參考和外部 fun,只要它們可以在執行中的系統中建立即可。

    自有 ID:OTP-14296

  • 內部程式碼變更:對 catch 的呼叫,後接對 erlang:get_stacktrace/0 的呼叫已重寫為使用 try 而不是 catch,以使程式碼具有前瞻性。

    自有 ID:OTP-14400

  • ets:fun2ms/1dbg:fun2ms/1 使用的 ms_transform 模組會評估常數算術表達式。這是必要的,因為通常評估常數表達式的 Erlang 編譯器無法識別 ms_transform 產生的格式。

    自有 ID:OTP-14454 輔助 ID:ERIERL-29

  • 狀態機器引擎 gen_statem 現在可以處理通用逾時(多個命名)以及絕對逾時時間。請參閱文件。

    gen_statem 回呼 Module:init/1 已成為強制性的,以與其他 gen_* 模組協調一致。對於使用 gen_statem:enter_loop/4-6gen_statem 回呼模組而言,這可能是不相容的。

    * 潛在的不相容性 *

    自有 ID:OTP-14531

改進與新功能

  • 改善了對字串的 Unicode 支援。unicode 模組中新增了正規化函式。使用改進的 Unicode 處理方式並在字素叢集上運作的新函式擴展了 string 模組 API。新函式在 unicode:chardata() 類型上運作,因此它們也接受 UTF-8 二進位制 作為輸入。

    舊的字串 API 已標記為已過時。某些錯誤情況的傳回值已變更。

    * 潛在的不相容性 *

    自有 ID:OTP-10289 輔助 ID:OTP-10309

  • 有兩個新的 guard BIF 'floor/1' 和 'ceil/1'。它們都傳回整數。在 'math' 模組中,有兩個具有相同名稱的新 BIF 會傳回浮點值。

    自有 ID:OTP-13692

  • 使程式碼變更、終止和 handle_info 回呼在 OTP 行為中成為可選的。

    自有 ID:OTP-13801

  • 移除了對使用 Erlang/OTP R7 及更早版本建立的 Dets 檔案的支援。

    自有 ID:OTP-13830

  • 取代了已棄用的符號 time unit 表示法的使用。

    自有 ID:OTP-13831 輔助 ID:OTP-13735

  • 已將函式 fmod/2 新增至 math 模組。

    自有 ID:OTP-14000

  • 從使用 proc_lib 的處理程序收到的 EXIT 訊號現在看起來像從使用 spawn_link 產生的處理程序收到的 EXIT 訊號。特別是,這表示堆疊追蹤現在包含在 EXIT 訊號中,以便可以看到處理程序在何處崩潰。

    自有 ID:OTP-14001

  • 當新增已存在的元素時,sets:add_element/2 更快,而當要刪除的元素不存在時,sets:del_element/2 更快。這種最佳化可以使某些操作(例如具有許多重疊元素的 sets:union/2)的速度加快多達兩個數量級。

    自有 ID:OTP-14035

  • 在文件中新增有關達到最大重新啟動頻率時監督者關機原因的資訊。

    自有 ID:OTP-14037 輔助 ID:PR-1233

  • 新增 rand:jump/[0|1] 函式。

    自有 ID:OTP-14038 輔助 ID:PR-1235

  • 新增了用於偵測已變更程式碼的函式。code:modified_modules/0 會傳回所有目前已載入且在磁碟上已變更的模組。code:module_status/1 會傳回模組的狀態。在 shell 和 c 模組中,mm/0code:modified_modules/0 的簡寫,而 lm/0 會重新載入所有目前已載入且在磁碟上已變更的模組。

    自有 ID:OTP-14059

  • 現在,assert.hrl 中的每個 assert 巨集都有一個具有額外引數的對應版本,用於在斷言中新增註解。例如,這些可以作為錯誤報告的一部分列印,以闡明失敗檢查的含義。

    自有 ID:OTP-14066

  • error_logger_tty_herror_logger_file_h 現在會將非本地訊息的節點資訊插入到訊息本身之前,而不是之後,這是為了提高可讀性,並且不會變更訊息末尾的換行屬性。

    自有 ID:OTP-14068

  • Erlang 程式碼檢查器會檢查格式不正確的類型限制。

    自有 ID:OTP-14070 輔助 ID:PR-1214

  • 預設情況下,現在使用 export_all 時會發出警告。可以使用 nowarn_export_all 停用警告。

    自有 ID:OTP-14071

  • gen_server 處理程序崩潰時,將會列印用戶端的堆疊追蹤,以方便除錯。

    自有 ID:OTP-14089

  • 透過將表格識別碼類型從整數變更為參考來最佳化 ETS 操作。參考可以更直接地對應到表格,減少潛在的鎖定爭用,並使表格的建立和刪除具有更好的擴展性。

    ETS 表格識別碼的不透明類型變更可能會導致在對此不透明類型做出錯誤假設的程式碼中失敗。

    注意

    一個 Erlang 節點上儲存的表格數量曾經受到限制。現在已不再如此(除了受記憶體使用量限制)。先前的預設限制約為 1400 個表格,並且可以在啟動 Erlang 執行階段系統之前設定環境變數 ERL_MAX_ETS_TABLES 來增加此限制。此硬性限制已移除,但目前無論如何設定 ERL_MAX_ETS_TABLES 仍然很有用。應將其設定為所使用表格的最大約略值。這是因為命名表格的內部表格會使用此值來調整大小。如果使用大量命名表格且尚未增加 ERL_MAX_ETS_TABLES,則命名表格查閱的效能將會降低。

    * 潛在的不相容性 *

    自有 ID:OTP-14094

  • 已將 take/2 新增至 dictorddictgb_trees。已將 take_any/2 新增至 gb_trees

    自有 ID:OTP-14102

  • 擴展 gen_event API 以處理選項。

    自有 ID:OTP-14123

  • 將有關如何調整監督者重新啟動頻率(強度和週期)的建議新增至系統文件 - 設計原則 - 監督者行為。

    自有 ID:OTP-14168 輔助 ID:PR-1289

  • gen_fsm 已棄用,並由 gen_statem 取代,但是為了向後相容性原因,gen_fsm 可能會在很長一段時間內繼續以未記錄的功能存在。

    自有 ID:OTP-14183

  • shell 函數 c/1c/2 已擴展,因此如果參數是模組名稱而不是檔案名稱,它會自動找到 .beam 檔案和對應的原始碼檔案,然後使用相同的編譯器選項(加上傳遞給 c/2 的任何選項)重新編譯模組。如果編譯失敗,則會保留舊的 beam 檔案。此外,還加入了 c(Mod, Opts, Filter),其中 Filter 參數允許您在新增新選項之前移除舊的編譯器選項。

    新的實用工具函數 file_find/2/3find_source/1/2/3 已新增至 filelib

    Own Id: OTP-14190

  • 先前版本的 OTP 中的 erl_tar 僅支援 USTAR 格式。這限制了路徑名稱最多為 255 個位元組,並且不以可移植的方式支援名稱中的 Unicode 字元。

    erl_tar 現在支援讀取目前常用的 tar 封存檔格式,例如 v7、STAR、USTAR、PAX 和 GNU tar 對 STAR/USTAR 格式的擴充功能。寫入 tar 封存檔時,如果需要(例如,為了支援非常長的檔案名稱或具有 Unicode 字元的檔案名稱),erl_tar 現在可以將它們以 PAX 格式寫入。如果可能,erl_tar 仍然會以 USTAR 格式寫入 tar 封存檔,以達到最大的可攜性。

    Own Id: OTP-14226

  • base64:mime_decode/1 已最佳化,現在幾乎與 base64:decode/1 一樣快;以前明顯較慢。

    Own Id: OTP-14245

  • 現在 erl_tar 從 tar 封存檔解壓縮檔案時,會從路徑名稱中移除任何開頭的 '/',並將訊息寫入錯誤記錄檔。此外,還有一個新的目錄遍歷攻擊檢查;如果相對路徑指向目前工作目錄的上方,則解壓縮將會中止。

    Own Id: OTP-14278

  • 由於 atom 包含任意 Unicode 字元,因此進行了各種更新。

    Own Id: OTP-14285

  • Crypto 應用程式現在支援產生密碼學上強大的亂數(小於 1.0 的浮點數和任意範圍的整數),作為 'rand' 模組的外掛程式。

    Own Id: OTP-14317 Aux Id: PR-1372

  • 新增函數 ets:select_replace/2,它使用符合規範來執行 ETS 物件的原子「比較並交換」操作。

    Own Id: OTP-14319 Aux Id: PR-1076

  • Erlang 程式碼 linter 會檢查錯誤的 dialyzer 屬性。它還會檢查類型宣告中錯誤的類型變數。

    Own Id: OTP-14323

  • rand 模組中實作了兩個新函數;normal/2normal_s/3,它們都會根據參數產生具有平均值和變異數的常態分佈(虛擬)亂數。

    Own Id: OTP-14328 Aux Id: PR-1382

  • 將 OTP 內部 PCRE 函式庫從 8.33 版升級至 8.40 版。此函式庫用於實作 re 正規表示式模組。

    除了各種錯誤修正外,新版本還可提供更好的堆疊保護。為了利用此功能,現在預設將所有平台上一般排程器執行緒的堆疊大小設定為 128 個千字。一般排程器執行緒的堆疊大小可以在系統啟動時,將 +sss 命令列參數傳遞至 erl 命令來設定。

    如需版本 8.33 和 8.40 之間對 PCRE 所做的變更資訊,請參閱 http://pcre.org/original/changelog.txt

    * 潛在的不相容性 *

    Own Id: OTP-14331 Aux Id: ERL-208

  • 新增函數 re:version/0,它會傳回有關用於實作 re 模組的 OTP 內部 PCRE 版本資訊。

    Own Id: OTP-14347 Aux Id: PR-1412

  • 儲存在 BEAM 檔案中的偵錯資訊格式(使用 debug_info 時)已變更。此變更的目的是為了更好地支援其他以 BEAM 為基礎的語言,例如 Elixir 或 LFE。

    OTP 中包含的所有工具(dialyzer、debugger、cover 等)都會處理新格式和先前的格式。使用 beam_lib:chunk(Beam, [abstract_code]) 擷取偵錯資訊的工具將會繼續使用新格式和舊格式。呼叫 beam_lib:chunk(Beam, ["Abst"]) 的工具將無法使用新格式。

    如需詳細資訊,請參閱 beam_lib 文件中關於 debug_info 的描述,以及 compile 文件中關於 {debug_info,{Backend,Data}} 選項的描述。

    Own Id: OTP-14369 Aux Id: PR-1367

  • 將選項 hibernate_after 新增至 gen_server、gen_statem 和 gen_event。也新增至已棄用的 gen_fsm 行為。

    Own Id: OTP-14405

  • gen_servergen_statemproc_lib 建立的當機報告大小受到 Kernel 應用程式變數 error_logger_format_depth 的限制。目的是為了限制當具有龐大訊息佇列或狀態的程序當機時,傳送至 error_logger 程序的訊息大小。

    proc_lib 產生的當機報告包含新的標記 message_queue_len。相鄰報告也包含新的標記 current_stacktrace。最後,相鄰報告不再包含標記 messagesdictionary

    新的函數 error_logger:get_format_depth/0 可用於擷取 Kernel 應用程式變數 error_logger_format_depth 的值。

    Own Id: OTP-14417

STDLIB 3.3

已修正的錯誤和故障

  • 只有兩行的 escript 無法運作。

    Own Id: OTP-14098

  • 字元 ($char) 可用於常數模式運算式。它們也可用於類型和合約中。

    Own Id: OTP-14103 Aux Id: ERL-313

  • 已修正 erl_parse:anno_to_term/1erl_parse:anno_from_term/1 的簽章。使用這些函數不再會導致錯誤的 Dialyzer 警告。

    Own Id: OTP-14131

  • 改進了 map 的美化列印。

    Own Id: OTP-14175 Aux Id: seq13277

  • 如果 zip 模組中的任何下列函數當機,則會讓檔案保持開啟:extract()unzip()create()zip()。此問題已修正。

    無法解壓縮具有「Unix 標頭」的 zip 檔案。

    Own Id: OTP-14189 Aux Id: ERL-348, ERL-349

  • 改善 Erlang shell 對長名稱的 Tab 鍵自動完成功能。

    Own Id: OTP-14200 Aux Id: ERL-352

  • sys 的參考手冊中有關在執行階段動態變更模組的程序所使用的 'get_modules' 訊息的一些錯誤資訊。現在已修正此文件。

    Own Id: OTP-14248 Aux Id: ERL-367

改進和新功能

  • gen_statem 的錯誤修正、新功能和改進

    新的類型 init_result/1 已取代舊的 init_result/0,因此如果您使用過舊的類型(從未記錄在文件中),您必須變更您的程式碼,這可能會被視為潛在的不相容性。

    程式碼變更後變更回呼模式無法運作,因為沒有記錄新的回呼模式。此錯誤已修正。

    事件類型 state_timeout 和 {call,From} 無法使用 {next_event,EventType,EventContent} 動作產生,因為它們未通過執行階段類型檢查。此錯誤現已修正。

    現在可以使用(新的)狀態回呼傳回值 {repeatstate,...}、{repeat_state_and_data,} 和 repeat_state_and_data 來重複狀態進入呼叫。

    已進行許多程式碼清理,特別是在計時器處理方面。例如,現在會使用非同步 cancel_timer。錯誤處理也已清理。

    為了與可能對其他 gen_* 進行的未來變更保持一致,現在 terminate/3 具有後援,且 code_change/4 不是強制性的。

    Own Id: OTP-14114

  • 已新增 filename:safe_relative_path/1 以清理相對路徑。

    Own Id: OTP-14215

STDLIB 3.2

已修正的錯誤和故障

  • 當 simple_one_for_one 管理者關閉時,如果子程序以 {shutdown, Term} 形式的結束原因結束,則先前會列印錯誤報告。現在已修正此問題。

    Own Id: OTP-13907 Aux Id: PR-1158, ERL-163

  • 允許將空清單做為與 dbg:fun2ms/1 一起使用的 fun 的參數。

    Own Id: OTP-13974

改進和新功能

  • 使用 3 個新功能改進了新的行為 gen_statem:針對 gen_statem:call/2,3、狀態進入程式碼和狀態逾時使用舊樣式非 Proxy 逾時的可能性。這些都是回溯相容的。已進行微小的程式碼和文件改進,包括對逾時零處理的邊界語義修正。

    Own Id: OTP-13929 Aux Id: PR-1170, ERL-284

STDLIB 3.1

已修正的錯誤和故障

  • 已更新 zip:unzip/1,2zip:extract/1,2 函數以處理目錄遍歷漏洞。zip 檔案中任何包含指向頂層工作目錄 cwd 上方目錄的路徑的元素,都將改為在 cwd 中解壓縮。在解壓縮作業期間,會針對 zip 檔案中的任何這類元素列印錯誤訊息。keep_old_files 選項決定檔案是否會覆寫 zip 檔案中先前具有相同名稱的檔案。

    Own Id: OTP-13633

  • 修正 ets:match_object/1,3 的合約。

    Own Id: OTP-13721 Aux Id: PR-1113

  • 已修正在 bugs.erlang.org 的 Jira 個案 ERL-172 和 ERL-187 中,關於 gen_statem:code_change/4 的類型規格和 Emacs 範本產生錯誤。

    Own Id: OTP-13746 Aux Id: ERL-172, ERL-187

改進與新功能

  • gen_statem 已變更為將伺服器的回呼模式設定為 Module:callback_mode/0 的回傳值。這有助於程式碼降級,因為回呼模式現在變成目前作用中程式碼的屬性,而不是伺服器程序的屬性。

    Module:init/1 的例外處理也已改進。

    * 潛在的不相容性 *

    自有 ID:OTP-13752

STDLIB 3.0.1

修正錯誤與故障

  • 修正 Erlang Shell 中關於類型記錄的錯誤。此錯誤是在 OTP-19.0 中引入的。

    自有 ID:OTP-13719 輔助 ID:ERL-182

STDLIB 3.0

修正錯誤與故障

  • 修正影響 dets:open_file/2 的競爭錯誤。

    自有 ID:OTP-13260 輔助 ID:seq13002

  • 不要搜尋不存在的 Map 鍵兩次

    對於 maps:get/2,3maps:find/2,如果在小型 Map 中搜尋立即鍵 (例如 atom),若該鍵不存在,則會執行兩次搜尋。

    自有 ID:OTP-13459

  • 避免在 Solaris 上出現零星的邊角案例數學錯誤,例如,在不應該發生時,在 exp() 和 pow() 中的下溢會拋出錯誤。

    自有 ID:OTP-13531

  • 修正 Map 鍵變數的檢查

    Map 鍵不能未綁定,然後用於並行匹配。

    範例:#{ K := V } = #{ k := K } = M. 如果 'K' 未綁定,則此為非法。

    自有 ID:OTP-13534 輔助 ID:ERL-135

  • 修正 openbsd 上 re 的錯誤,有時 re:run 會傳回不正確的結果。

    自有 ID:OTP-13602

  • 為了避免在 supervisor 重新啟動時可能發生的計時器瓶頸,當 supervisor 無法重新啟動子程序時,不再使用計時器伺服器。

    自有 ID:OTP-13618 輔助 ID:PR-1001

  • Erlang 程式碼預處理器 (epp) 可以處理跨越多個 token 的檔名。範例:-include("a" "file" "name").

    自有 ID:OTP-13662 輔助 ID:seq13136

改進與新功能

  • erl_parse 模組中抽象格式的類型已改進。

    自有 ID:OTP-10292

  • 函式規格的未公開語法 -spec F/A :: Domain -> Range 已移除 (未經淘汰)。

    用於約束 (在函式規格中) 的 is_subtype(V, T) 語法不再記錄,應改用較新的語法 V :: T。Erlang 解析器仍然識別 is_subtype 語法,並將在一段時間內繼續這樣做。

    * 潛在的不相容性 *

    自有 ID:OTP-11879

  • random」模組已淘汰。請改用「rand」模組。

    自有 ID:OTP-12502 輔助 ID:OTP-12501

  • 背景:在具有類型宣告但沒有初始設定式的記錄欄位中,如果該值不存在,Erlang 解析器會自動將單例類型 'undefined' 插入宣告的類型清單中。也就是說,記錄宣告

    -record(rec, {f1 :: float(), f2 = 42 :: integer(), f3 :: some_mod:some_typ()}).

    由解析器翻譯為

    -record(rec, {f1 :: float()'undefined', f2 = 42 :: integer(), f3 :
    some_mod:some_typ()'undefined'}).

    這樣做的理由是建立「虛擬」#rec{} 記錄不應導致 dialyzer 發出警告,例如,#rec.f1 欄位的隱含初始化違反其類型宣告。

    問題:這種看似無害的動作有一些意想不到的後果。

    首先,當此欄位沒有「明顯」的預設初始設定式時,程式設計人員無法宣告例如只有浮點數對 #rec{} 記錄的 f1 欄位有意義。(這也會影響諸如 PropEr 等工具,這些工具使用 Erlang 解析器產生的這些宣告來產生用於測試目的的隨機記錄執行個體。)

    這也表示,如果對 f1 欄位的值執行 is_atom/1 測試或更奇特的 atom_to_list/1 呼叫,dialyzer 不會發出警告。

    同樣地,如果發現記錄結構中 f1 未初始化為某個浮點數,也無法擴充 dialyzer 以發出警告。

    最後但並非最不重要的一點,當欄位的類型是不透明類型時,在語意上會產生問題:建立不透明類型和結構化類型的聯集對於分析而言非常麻煩,因為這從根本上破壞了該點項目的不透明性。

    變更:為了解決這些問題,解析器將不再自動插入 'undefined' 值;相反地,使用者可以選擇此值對 (欄位) 有意義且不適用之處,然後手動插入 | 'undefined'

    此變更的後果:此變更表示,對於建立具有未初始化欄位且這些欄位具有與 'undefined' (例如,float/0) 不相容的宣告類型之記錄的所有位置,dialyzer 都會發出警告。可以輕鬆地將 | 'undefined' 新增至此欄位的類型,來取消此警告。這也新增了使用者確實打算建立此欄位未初始化的記錄的說明文件。

    * 潛在的不相容性 *

    自有 ID:OTP-12719

  • 移除 erl_scanerl_parse 模組中已淘汰的函式。

    自有 ID:OTP-12861

  • 預處理器現在可以展開 ?FUNCTION_NAME 和 ?FUNCTION_ARITY 巨集。

    自有 ID:OTP-13059

  • 已實作新的行為 gen_statem。經過徹底的審查,足以讓至少兩個繁重的 OTP 應用程式使用,並將會保留下來。但是,根據使用者回饋,我們不預期但可能會發現有必要在 OTP-20.0 中進行次要的不回溯相容的變更,因此其狀態可以指定為「並非完全實驗性」...

    gen_statem 行為旨在取代新程式碼的 gen_fsm。它具有相同的功能,並新增了一些非常有用的功能

    • 收集狀態程式碼
    • 狀態可以是任何項目
    • 可以延後事件
    • 可以自行產生事件
    • 可以從較後狀態傳送回覆
    • 可以有多個 sys 可追蹤的回覆

    gen_statem 的回呼模型與 gen_fsm 的回呼模型不同,但從 gen_fsm 重寫為 gen_statem 仍然相當容易。

    自有 ID:OTP-13065 輔助 ID:PR-960

  • 使用原生 BIF 實作來最佳化 binary:split/2 和 binary:split/3。

    自有 ID:OTP-13082

  • 背景:自 R12B 起,記錄欄位的類型已由 epp:parse_file() 放入個別的形式,使記錄宣告形式未鍵入。但是,個別的形式不遵循類型宣告的語法,並且檢查 -type() 屬性的解析轉換需要知道特殊的語法。由於編譯器會將 epp:parse_file() 的傳回值儲存為抽象程式碼區塊中的偵錯資訊 ("Abst"abstract_code),因此如果工具檢查抽象程式碼中的 -type() 屬性,也需要知道特殊的語法。

    變更:epp:parse_file() 不會建立個別的類型形式,但類型資訊會保留在記錄欄位中。這表示所有解析轉換和所有檢查 -record() 宣告的工具都需要識別 {typed_record_field, Field, Type}

    * 潛在的不相容性 *

    自有 ID:OTP-13148

  • 現在禁止在二進位產生器中使用類型 bytes 的無大小欄位。(其他寫入無大小欄位的方式,例如 binary,已經被禁止。)

    自有 ID:OTP-13152

  • 類型 map/0 是內建的,無法重新定義。

    自有 ID:OTP-13153

  • 如果給定原始檔名(二進位),則讓 dets:open_file()badarg 訊息結束。

    自有 ID:OTP-13229 輔助 ID:ERL-55

  • 新增 filename:basedir/2,3

    basedir 會針對「user_cache」、「user_config」、「user_data」、「user_log」、「site_config」和「site_data」傳回適當的路徑。在 Linux 和類似 Linux 的系統上,路徑會遵循 XDG 環境變數。

    自有 ID:OTP-13392

  • 有新的預處理器指示詞 -error(Term)-warning(Term),分別導致編譯錯誤或編譯警告。

    自有 ID:OTP-13476

  • 藉由使用單一傳遞來建立新的清單,同時檢查正確性,最佳化 '++' 運算子和 lists:append/2

    自有 ID:OTP-13487

  • 新增 maps:update_with/3,4maps:take/2

    自有 ID:OTP-13522 輔助 ID:PR-1025

  • 已新增 lists:join/2。類似於 string:join/2,但適用於任意清單。

    自有 ID:OTP-13523

  • 混淆斷言以讓 Dialyzer 停止顯示。

    自有 ID:OTP-13524 輔助 ID:PR-1002

  • 現在,Supervisors 會在 sys:get_status/1,2 的傳回值中明確新增其回呼模組。這是為了簡化自訂 supervisor 實作。supervisor 的 sys:get_status/1,2 傳回值的 Misc 部分現在是

    [{data, [{"State", State}]},{supervisor,[{"Callback",Module}]}]

    * 潛在的不相容性 *

    自有 ID:OTP-13619 輔助 ID:PR-1000

  • 放寬 proc_lib 中初始呼叫的轉換,也就是說,移除僅對 gen_servergen_fsm 執行轉換的限制。這讓使用者定義的基於 gen 的通用回呼模組可以在 c:i() 和觀察器中正常顯示。

    自有 ID:OTP-13623

  • 函式 queue:lait/1 (liat/1 的拼寫錯誤) 現在已淘汰。

    自有 ID:OTP-13658

STDLIB 2.8.0.1

改進與新功能

  • 列表相減(-- 運算子)現在會在大型輸入上產生正確的結果。

    專屬 ID:OTP-15371

STDLIB 2.8

修正錯誤與故障

  • 修正直譯器中綁定的 Map 鍵變數比對的評估。

    在此修補程式之前,以下程式碼不會評估:X = key,(fun(#{X := value}) -> true end)(#{X => value})

    自有 ID:OTP-13218

  • 修正 erl_eval 未使用非本機函式處理常式。

    自有 ID:OTP-13228 輔助 ID:ERL-32

  • 如果存在 -deprecated() 屬性但沒有 -module() 宣告,Erlang 程式碼檢查器不再當機。

    自有 ID:OTP-13230 輔助 ID:ERL-62

  • 由於 OTP 18.0 中時間 API 的重寫,導致 dets:info(Tab, safe_fixed) 返回結果中的時間戳被意外地損壞。此問題現已修復。

    問題編號:OTP-13239 輔助編號:OTP-11997

  • 已消除 beam_lib 在使用加密抽象格式時,罕見的競爭條件。

    問題編號:OTP-13278

  • 改進了 maps:with/2 和 maps:without/2 演算法。

    新的實作顯著加快了所有輸入大小的執行速度。

    問題編號:OTP-13376

改進與新功能

  • 改進了時間扭曲安全性。

    在追蹤、循序追蹤和系統分析功能中,引入了 monotonic_timestampstrict_monotonic_timestamp 選項。這是因為現有的 timestamp 選項不具備時間扭曲安全性。

    ets:info/2dets:info/2 中,引入了 safe_fixed_monotonic_time 選項。這是因為現有的 safe_fixed 選項不具備時間扭曲安全性。

    問題編號:OTP-13222 輔助編號:OTP-11997

  • 在 Shell 中,Ctrl+W(刪除單字)將不再把 "." 視為單字的一部分。

    問題編號:OTP-13281

STDLIB 2.7

已修復的錯誤和故障

  • Erlang Pretty Printer 使用 :: 來表示函式類型約束。

    修復了在 map pair 類型中,pretty printing 註釋類型聯集元素的錯誤。

    修正了關於類型和規格文件的一些小問題。

    問題編號:OTP-13084

  • 如果列表的 pretty printing 設定為 false,則 shell 命令 rp 會將字串列印為整數列表。

    問題編號:OTP-13145

  • 如果給出具有衝突類型的位元語法表達式(例如,如果欄位類型給定為 'integer-binary'),則 shell 會崩潰。(感謝 Aleksei Magusev 回報此錯誤。)

    問題編號:OTP-13157

  • rand:export_seed/0 即使之前沒有建立 seed 也永遠不會返回 'undefined'。已修復為如果程序字典中沒有 seed,則返回 'undefined'。

    問題編號:OTP-13162

改進與新功能

STDLIB 2.6

已修復的錯誤和故障

  • 在 OTP 18.0 中,qlc 無法很好地處理語法錯誤。此錯誤已修復。

    問題編號:OTP-12946

  • 優化當解壓縮到記憶體時的 zip:unzip/2。

    問題編號:OTP-12950

  • 更新了 STDLIB 參考手冊,以顯示有關 gen_fsm:reply/2 的回傳值的正確資訊。

    問題編號:OTP-12973

  • re:split2,3 和 re:replace/3,4 現在可以正確處理使用 'unicode' 選項編譯的預編譯模式。

    問題編號:OTP-12977

  • 匯出文件中的 shell:catch_exception/1

    問題編號:OTP-12990

改進與新功能

  • 引入了一種機制,用於限制內建錯誤記錄器事件產生的文字量。它有助於限制日誌檔案的大小和用於產生它們的 CPU 時間。

    此機制是實驗性的,因為如果發現它無法解決應該解決的問題,則可能會進行變更。在這種情況下,此機制可能會進行不向後相容的改進。

    請參閱 Kernel 應用程式中 config 參數 error_logger_format_depth 的文件,以了解如何開啟此功能。

    問題編號:OTP-12864

STDLIB 2.5

已修復的錯誤和故障

  • 修復 filename:join/2 中對單個點的處理

    參考手冊說明 filename:join(A,B) 等同於 filename:join([A,B])。在某些罕見的情況下,這被證明是不正確的。例如

    filename:join("/a/.","b") -> "/a/./b" vs filename:join(["/a/.","b"]) -> "/a/b"

    此問題已修正。現在,只有在結果路徑的開頭或結尾出現單個點時才會保留它。

    * 潛在的不相容性 *

    問題編號:OTP-12158

  • 已移除 gen_server 中未記錄的選項 generic_debug

    問題編號:OTP-12183

  • 已重寫 erl_lint:icrt_export/4,使程式碼真正遵循 Erlang 的範圍規則,而不是僅在大多數情況下意外地遵循。

    問題編號:OTP-12186

  • 將 'trim_all' 選項新增至 binary:split/3

    可以設定此選項來刪除呼叫 binary:split/3 結果中_所有_空白部分。

    問題編號:OTP-12301

  • 修正了 orddict(3) 關於 fold()map/0 評估順序的問題。

    問題編號:OTP-12651 輔助編號:seq12832

  • 修正 maps 模組錯誤例外狀況

    現在,對 maps 模組函式的錯誤輸入將會產生以下例外狀況

    • {badmap, NotMap},或
    • badarg。

    問題編號:OTP-12657

  • 現在可以在 JCL 模式下(使用 Ctrl-Y)貼上先前 shell 會期中複製的文字。同時,修復了在貼上文字時導致 JCL 模式崩潰的錯誤。

    問題編號:OTP-12673

  • 新增 uptime() shell 命令。

    問題編號:OTP-12752

  • 在 erl_lint 中快取 nowarn_bif_clash 函式。

    此修補程式將 nowarn_bif_clash 儲存在 lint 記錄中。透過在編譯 erlang parser 時使用 erlc +'{eprof,lint_module}',我們注意到在 nowarn_function/2 上花費的時間從 30% 減少到 0.01%。

    問題編號:OTP-12754

  • 透過使用快取的檔案名稱資訊來優化 Erlang 程式碼靜態檢查器。

    問題編號:OTP-12772

  • 如果 simple_one_for_one 的子程序從其啟動函式返回 ignore,則不再針對任何重新啟動類型儲存該子程序。由於 supervisor 是 simple_one_for_one,因此無法重新啟動或刪除該子程序。

    問題編號:OTP-12793

  • 使 ets:file2tab 保留表格的已啟用 read_concurrencywrite_concurrency 選項。

    問題編號:OTP-12814

  • 在許多情況下,使用者程式碼需要能夠區分正常關閉的 socket 和中止的 socket。設定 {show_econnreset, true} 選項可讓使用者在主動和被動 socket 上收到 ECONNRESET 錯誤。

    問題編號:OTP-12841

改進與新功能

  • 允許使用 map 作為 supervisor 標誌和子程序規格

    之前,supervisor 標誌和子程序規格是作為 tuple 給定的。儘管為了向後相容性而保留了此方式,但現在也允許將這些參數作為 map 給定,請參閱 sup_flagschild_spec

    問題編號:OTP-11043

  • 新增了一個新的系統訊息 terminate。可以使用 sys:terminate/2,3 發送此訊息。如果接收程序正確處理系統訊息,則會在收到此訊息後不久終止。

    新函式 proc_lib:stop/1,3 利用此新系統訊息並監控接收程序,以便於為「特殊程序」建立同步停止機制。

    proc_lib:stop/1,3 由以下函式使用

    • gen_server:stop/1,3(新增)
    • gen_fsm:stop/1,3(新增)
    • gen_event:stop/1,3(修改為同步)
    • wx_object:stop/1,3(新增)

    問題編號:OTP-11173 輔助編號:seq12353

  • 移除 pg 模組,該模組已透過 OTP-17 棄用,現在已從 STDLIB 應用程式中移除。該模組已被標記為實驗性 15 年以上,並且很大程度上已被 Kernel 應用程式中的 pg2 模組取代。

    問題編號:OTP-11907

  • 新 BIF:erlang:get_keys/0,列出與程序字典相關聯的所有索引鍵。注意:erlang:get_keys/0 為自動匯入。

    * 潛在的不相容性 *

    問題編號:OTP-12151 輔助編號:seq12521

  • 將三個新函式新增至 io_lib-- scan_format/2unscan_format/1build_text/1-- 它們公開格式控制序列的已剖析形式,以便輕鬆修改或篩選 io_lib:format/2 的輸入。例如,這可以用來在執行實際格式化之前,將諸如 ~w~p 之類的無界大小控制序列替換為對應的深度限制 ~W~P

    問題編號:OTP-12167

  • 引入 erl_anno 模組,它是抽象格式中 token 和 tuple 的第二個元素的抽象。

    問題編號:OTP-12195

  • 在表達式和模式中,支援變數作為 Map 的索引鍵

    Erlang 將接受任何表達式作為 Map 表達式中的索引鍵,並且在 Map 模式中接受文字或綁定變數作為索引鍵。

    問題編號:OTP-12218

  • 已移除 Mnemosyne 規則的最後痕跡。

    問題編號:OTP-12257

  • 在 match_specs 中正確支援 map

    問題編號:OTP-12270

  • 新函式 ets:take/2。其工作方式與 ets:delete/2 相同,但也返回已刪除的物件。

    問題編號:OTP-12309

  • string:tokens/2 速度稍快,尤其是當分隔符號列表僅包含一個分隔符號字元時。

    問題編號:OTP-12422 輔助編號:seq12774

  • 已使用類型和規格更新抽象格式的文件 (在 ERTS 使用者指南中)。(感謝 Anthony Ramine。)

    已移除抽象格式類型中使用的括號的明確表示法。相反,新的函式 erl_parse:type_inop_prec()erl_parse:type_preop_prec() 可以用在需要的地方插入括號。

    問題編號:OTP-12492

  • 防止 zip:zip_open/[12] 在父程序死亡時洩漏檔案描述器。

    問題編號:OTP-12566

  • 新增新的亂數產生器,請參閱 rand 模組。它具有更好的特性和改進的介面。

    問題編號:OTP-12586 輔助編號:OTP-12501、OTP-12502

  • 當給定空二進位制時,filename:split/1 現在將會返回一個空列表,使其與給定空列表時的傳回值一致。

    問題編號:OTP-12716

  • sync 選項新增至 ets:tab2file/3

    問題編號:OTP-12737 輔助編號:seq12805

  • 新增函式 gb_sets:iterator_from()gb_trees:iterator_from()。(感謝 Kirill Kinduk。)

    問題編號:OTP-12742

  • 在 maps 模組中新增 maps:filter/2 函式。

    專案編號:OTP-12745

  • 變更一些內部資料結構為 Maps,以加快編譯時間。測得的加速約為 10%-15%。

    專案編號:OTP-12774

  • 更新 orddict 以使用參數化型別和規格。(感謝 UENISHI Kota。)

    專案編號:OTP-12785

  • eunit 中的斷言巨集已移至 stdlib/include/assert.hrl。這個檔案會被 eunit.hrl 包含。因此,對 eunit 使用者來說沒有任何改變,但現在也可以單獨包含這些斷言。

    專案編號:OTP-12808

STDLIB 2.4

修正的錯誤與故障

  • 字元類型 \d、\w 和 \s 的行為一直是不匹配值大於 255 的字元,而不是 128,也就是說它們僅限於 ISO-Latin-1 而不是 ASCII

    專案編號:OTP-12521

改進與新功能

  • c:m/1 現在會顯示模組的 MD5 總和。

    專案編號:OTP-12500

  • 使 ets:i/1 處理來自 IO 伺服器的二進位輸入。

    專案編號:OTP-12550

STDLIB 2.3

修正的錯誤與故障

  • string:tokens/2 的文件現在明確指出,相鄰的分隔符號字元不會在產生的符號列表中產生任何空字串。

    專案編號:OTP-12036

  • 修正 ssh 應用程式中損壞的棄用警告

    專案編號:OTP-12187

  • Maps:正確對齊文件中 union 型別的 assoc 值

    專案編號:OTP-12190

  • 修正在 'Cwd' 以點結尾時 filelib:wildcard/2 的錯誤

    專案編號:OTP-12212

  • 允許屬性內的 maps 值使用 Name/Arity 語法。

    專案編號:OTP-12213

  • 修正 edlin 以正確儲存使用 ctrl-u 刪除的文字。在此修正之前,在 Erlang shell 中輸入文字,然後使用 ctrl-u 刪除,接著使用 ctrl-y 將其重新貼上,會導致貼上的文字與原始刪除的文字相反。

    專案編號:OTP-12224

  • 如果回呼函式因 exit/1 而終止,則 gen_server 產生的錯誤報告中將不會有堆疊追蹤。此問題已修正。

    為了保持向後相容性,處理程序的實際結束原因不會改變。

    專案編號:OTP-12263,輔助編號:seq12733

  • ms_transform 產生的警告可能會指出錯誤的行號。

    專案編號:OTP-12264

改進與新功能

  • 支援在本地電腦上掛載的檔案系統以外的其他媒體上建立 tar 檔案。

    erl_tar api 擴展了 erl_tar:init/3,可讓您使用使用者提供的媒體儲存常式。一組 ssh 特定常式隱藏在新的函式 ssh_sftp:open_tar/3 中,以簡化在遠端 ssh 伺服器上建立 tar 檔案。

    將分塊檔案讀取選項新增至 erl_tar:add/3,4,以節省記憶體,例如在小型嵌入式系統上。在這種情況下,可以指定從檔案讀取的切片大小。

    專案編號:OTP-12180,輔助編號:seq12715

  • 針對呼叫程序中的長訊息佇列最佳化 I/O 請求。

    專案編號:OTP-12315

STDLIB 2.2

修正的錯誤與故障

  • sys:handle_debug/4 的 FormFunc 引數的類型規格錯誤地指向 dbg_fun()。現在已修正,新類型是 format_fun()。

    專案編號:OTP-11800

  • gen_fsm 和 gen_server 等行為應在將狀態列印到記錄之前,始終呼叫 format_status/2。

    專案編號:OTP-11967

  • dets:insert_new/2 的文件已修正。(感謝 Alexei Sholik 回報此錯誤。)

    專案編號:OTP-12024

  • 使用 io_lib:format 和控制序列 w、精確度 P 和欄位寬度 F 列印詞彙,其中 F< P 將會以以下兩種方式之一失敗

    1. 如果 P < 詞彙的列印長度,將會進入無限迴圈,消耗所有可用記憶體。

    2. 如果 P >= 詞彙的列印長度,將會引發例外狀況。

    這兩個問題現在已修正。

    專案編號:OTP-12041

  • maps:values/1 的文件已修正。

    專案編號:OTP-12055

  • 在 map 表達式中展開 shell 函式。

    專案編號:OTP-12063

改進與新功能

  • 新增 maps:with/2

    專案編號:OTP-12137

STDLIB 2.1.1

修正的錯誤與故障

  • OTP-11850 修正了 filelib:wildcard/1 以與損壞的符號連結一起運作。然而,此修正引入了問題,因為符號連結不再被 filelib:ensure_dir/1、filelib:is_dir/1、filelib:file_size/1 等函式跟隨。現在已修正此問題。

    專案編號:OTP-12054,輔助編號:seq12660

STDLIB 2.1

修正的錯誤與故障

  • 如果 "broken_symlink" 是不指向現有檔案的符號連結,則 filelib:wildcard("broken_symlink") 會傳回空清單。

    專案編號:OTP-11850,輔助編號:seq12571

  • erl_tar 現在可以處理包含 Unicode 字元的檔案名稱。請參閱 erl_tar 文件中的「UNICODE SUPPORT」。

    建立 tar 檔案時,erl_tar 有時會寫入過短的帶尾標記。GNU tar 會正確地從此類 tar 檔案中解壓縮檔案,但會抱怨「在 ... 有單獨的零區塊」。

    專案編號:OTP-11854

  • 當重新定義並匯出類型 map/0 時,Erlang 程式碼靜態分析器 (erl_lint) 會錯誤地發出錯誤。此錯誤已修正。

    專案編號:OTP-11872

  • 修正在偵錯工具和 erl_eval 中 map 更新的評估

    回報者:José Valim

    專案編號:OTP-11922

改進與新功能

STDLIB 2.0

修正的錯誤與故障

  • 選項 dupnames 在 re 中無法如預期運作。當尋找具有 {capture, [Name, ...]} 的名稱時,re:run 傳回該名稱符合的隨機實例,而不是文件所述的最左側符合實例。現在已修正此問題,以符合文件。也新增了選項 {capture,all_names} 和 re:inspect/2 函式,以進一步協助使用命名子模式。

    專案編號:OTP-11205

  • 如果為 standard_input 設定了選項 'binary',則如果輸出超過一頁長度,則 c:i() 會掛起 - 也就是說,在 "(c)ontinue (q)uit -->" 之後的輸入將無法讀取。此問題已修正。(感謝 José Valim)

    專案編號:OTP-11589

  • stdlib/lists:新增函式 droplast/1。此函式會捨棄非空清單的最後一個元素。lists:last/1 和 lists:droplast/1 是 hd/1 和 tl/1 的對偶,但適用於清單的結尾。(感謝 Hans Svensson)

    專案編號:OTP-11677

  • 允許一次性抑制所有自動匯入。導入 no_auto_import 屬性:-compile(no_auto_import)。對於總是使用限定函式名稱並希望避免自動匯入的函式與本地函式衝突的程式碼產生工具非常有用。(感謝 José Valim。)

    專案編號:OTP-11682

  • supervisor_bridge 不再報告子處理程序的正常終止。原因是在某些情況下,例如當重新啟動策略為 simple_one_for_one 時,記錄可能會完全被有關正常終止程序的報告所淹沒。(感謝 Artem Ocheredko)

    專案編號:OTP-11685

  • supervisor 模組中,使用 {via, Module, Name} 語法進行替代註冊的 sup_name() 和 sup_ref() 的類型註解現在與文件一致。Dialyzer 不再抱怨有效的 supervisor:start_link() 和 supervisor:start_child() 呼叫。(感謝 Caleb Helbling。)

    專案編號:OTP-11707

  • 已修正兩個 Dets 錯誤。當嘗試開啟一個不是 Dets 檔案的短檔案時,即使只有讀取權限,也會刪除該檔案。使用不是 Dets 檔案的檔案呼叫 dets:is_dets_file/1 時,會保持開啟檔案描述符。(感謝 Håkan Mattsson 回報此錯誤。)

    專案編號:OTP-11709

  • 修正 ets:all 中的競爭錯誤。同時建立表格可能會導致其他表格不包含在結果中。(感謝 Florian Schintke 回報此錯誤)

    專案編號:OTP-11726

  • erl_eval 現在會在 guard 中使用時正確評估 '=='/2。(感謝 José Valim)

    專案編號:OTP-11747

  • io_lib_pretty 中的 proplists:get_value/3 呼叫已替換為更快的 lists:keyfind/3。清單中的元素始終是 2 元組。(感謝 Andrew Thompson)

    專案編號:OTP-11752

  • 已修正 qlc 錯誤,其中篩選器被錯誤地最佳化掉。感謝 Sam Bobroff 回報此錯誤。

    專案編號:OTP-11758

  • Ulf Norell 回報並由 Anthony Ramine 修正了許多編譯器錯誤,在這些錯誤中,不尋常或毫無意義的程式碼會導致編譯器崩潰。

    專案編號:OTP-11770

  • 自 Erlang/OTP R16B 以來,Erlang 核心靜態分析器 (erl_lint) 在重新定義內建類型時,並未發出錯誤。此錯誤已修正。(感謝 Roberto Aloi。)

    專案編號:OTP-11772

  • 函數 sys:get_state/1,2sys:replace_state/2,3 已修正,使其現在可以在程序被 sys 暫停時執行。為了實現這一點,新增了新的回呼函式 Mod:system_get_state/1Mod:system_replace_state/2,它們也由通用行為 gen_servergen_eventgen_fsm 實作。

    潛在的不相容性指的是

    • 先前攔截系統訊息並將大小為 2 的元組作為最後一個參數傳遞給 sys:handle_system_msg/6 的行為不再支援。
    • sys:replace_state/2,3 中的 StateFun 失敗時,錯誤處理已從完全靜默更改為可能會(如果回呼模組未捕獲)在客戶端程序中拋出例外。

    (感謝 James Fish 和 Steve Vinoski)

    * 潛在的不相容性 *

    自有 ID:OTP-11817

改進和新功能

  • 選項 match_limit 和 match_limit_recursion 已新增至 re:run。選項 report_errors 也已新增,以便在 re:run 因限制或編譯錯誤而失敗時取得更多資訊。

    自有 ID:OTP-10285

  • 預先定義的類型 array/0dict/0digraph/0gb_set/0gb_tree/0queue/0set/0tid/0 已被棄用。它們將在 Erlang/OTP 18.0 中移除。

    取而代之的是,可以使用類型 array:array/0dict:dict/0digraph:graph/0gb_set:set/0gb_tree:tree/0queue:queue/0sets:set/0ets:tid/0。(注意:一直以來都必須使用 ets:tid/0。)

    在 Erlang/OTP 17.0 中,允許在本地重新定義類型 array/0dict/0 等等。

    已新增新類型 array:array/1dict:dict/2gb_sets:set/1gb_trees:tree/2queue:queue/1sets:set/1

    已引入編譯器選項 nowarn_deprecated_type。藉由包含屬性

    -compile(nowarn_deprecated_type).

    在 Erlang 原始程式檔中,可以避免在 Erlang/OTP 17.0 中出現關於已棄用類型的警告。

    該選項也可以作為編譯器標誌給定

    erlc +nowarn_deprecated_type file.erl

    自有 ID:OTP-10342

  • 對 erlang:open_port/2 使用 'spawn' 的呼叫已更新,以處理命令路徑中的空格。

    自有 ID:OTP-10842

  • Dialyzer 的 unmatched_return 警告已修正。

    自有 ID:OTP-10908

  • 禁止在二進位產生器的模式中使用無大小的欄位,並簡化 v3_core 對位元字串產生器的轉譯。(感謝 Anthony Ramine。)

    自有 ID:OTP-11186

  • Erlang 的 re 模組使用的 PCRE 程式庫版本已從 7.6 提升至 8.33。這意味著,除其他外,更好的 Unicode 和 Unicode 字元屬性支援。與 PCRE 8.33 相關的新選項也已新增至 re 模組(ucd、notempty_atstart、no_start_optimize)。PCRE 在 7.6 和 8.33 之間擴展了正規表示式語法,這就是為什麼這會造成潛在的不相容性。只有非常複雜的正規表示式可能會受到影響,但如果您知道您正在使用晦澀的功能,請測試執行您的正規表示式並驗證它們的行為沒有改變。

    * 潛在的不相容性 *

    自有 ID:OTP-11204

  • 已新增 dict:is_empty/1 和 orddict:is_empty/1。(感謝 Magnus Henoch。)

    自有 ID:OTP-11353

  • garbage_collect/1 BIF 或 check_process_code/2 BIF 的呼叫可能會觸發對呼叫 BIF 的程序以外的其他程序進行垃圾收集。先前的實作執行這些垃圾收集時,沒有考慮正在進行垃圾收集的程序的內部狀態。為了能夠更輕鬆且更有效率地實作產生原生程式碼,這些類型的垃圾收集已重寫。現在,像這樣的垃圾收集是由非同步請求訊號觸發,實際的垃圾收集由正在進行垃圾收集的程序本身執行,並由對發出請求的程序的回覆訊號完成。使用這種方法,程序可以停用垃圾收集並產生,而無需將堆積設定為可以進行垃圾收集的狀態。

    已引入 garbage_collect/2check_process_code/3 BIF。兩者都將選項列表作為最後一個參數。使用這些,可以發出非同步請求。

    code:purge/1code:soft_purge/1 已重寫,以利用非同步 check_process_code 請求來平行處理工作。

    特性影響:對 garbage_collect/1 BIF 或 check_process_code/2 BIF 的呼叫通常需要更長的時間才能完成,而整個系統不會像以前那樣受到操作的負面影響。對 code:purge/1code:soft_purge/1 的呼叫可能會更快或更慢地完成,具體取決於系統的狀態,而整個系統不會像以前那樣受到操作的負面影響。

    自有 ID:OTP-11388 輔助 ID:OTP-11535、OTP-11648

  • 改進主管的 via 參考的說明文件。(感謝 MaximMinin。)

    自有 ID:OTP-11399

  • orddict:from_list/1 現在使用 lists 模組中最佳化的排序常式,而不是(基本上)插入排序。根據輸入資料,新的 from_list/1 的速度從略快到比舊的 from_list/1 快幾個數量級。

    (感謝 Steve Vinoski。)

    自有 ID:OTP-11552

  • EEP43:新資料類型 - 映射

    使用映射,您可以例如

    • ____ - M0 = #{ a => 1, b => 2}, % 建立關聯

    • ____ - M1 = M0#{ a := 10 }, % 更新值

    • ____ - M2 = M1#{ "hi" => "hello"}, % 新增關聯

    • ____ - #{ "hi" := V1, a := V2, b := V3} = M2. % 將鍵與值匹配

    如需如何使用映射的資訊,請參閱參考手冊中的映射表示式。

    目前的實作不包含以下功能

    • ____ - 沒有變數鍵

    • ____ - 沒有單一值存取

    • ____ - 沒有映射理解

    請注意,映射在 OTP 17.0 期間是實驗性的。

    自有 ID:OTP-11616

  • 當使用 Tab 鍵完成時,Erlang Shell 現在會將零元函數一直擴展到右括號,除非有另一個具有相同名稱和不同元數的函數。(感謝 Pierre Fenoll。)

    自有 ID:OTP-11684

  • Erlang 程式碼預處理器 (epp) 在包含的檔案中遇到循環巨集定義時可能會循環。此錯誤已修正。

    感謝 Maruthavanan Subbarayan 回報此錯誤,並感謝 Richard Carlsson 提供錯誤修正。

    自有 ID:OTP-11728

  • 自 Erlang/OTP R13B 以來,Erlang 程式碼檢查器 (erl_lint) 每當重新定義任何類型 arity/0bitstring/0iodata/0boolean/0 時,都會發出警告。現在改為發出錯誤。

    * 潛在的不相容性 *

    自有 ID:OTP-11771

  • erl_parse:abstract/2encoding 選項已擴展為包含 none 和回呼函數(述詞)。

    自有 ID:OTP-11807

  • 匯出 zip 選項類型,以允許從其他模組參照。

    感謝 Pierre Fenoll 和 Håkan Mattson

    自有 ID:OTP-11828

  • 模組 pg 已被棄用,並將在 Erlang/OTP 18 中移除。

    自有 ID:OTP-11840

STDLIB 1.19.4

已修正的錯誤和故障

  • 修正 gen_server.erl 中的錯字。感謝 Brian L. Troutwine。

    自有 ID:OTP-11398

  • atan2 的規格應為 atan2(Y, X),而不是 atan2(X, Y)。感謝 Ary Borenszweig。

    自有 ID:OTP-11465

改進和新功能

  • 新增正規表示式語法的 XML 標記。感謝 Håkan Mattson。

    自有 ID:OTP-11442

STDLIB 1.19.3

已修正的錯誤和故障

  • 函數 dets:foldl/3dets:foldr/3dets:traverse/2 在遍歷表格到結尾後,沒有釋放表格。此錯誤是在 R16B 中引入的。(感謝 Manuel Duran Aguete。)

    自有 ID:OTP-11245

  • 如果錯誤地使用了 fun M:F/A 建構,則檢查器可能會崩潰。(感謝 Mikhail Sobolev。)

    自有 ID:OTP-11254

  • 已修正 io_lib:fread/2,3 的規格。(感謝 Chris King 和 Kostis Sagonas 指出此錯誤。)

    自有 ID:OTP-11261

改進和新功能

  • 修正 gen_server 中的類型錯字。

    自有 ID:OTP-11200

  • 更新 filelib 和 io_prompt 中的類型規格。感謝 Jose Valim。

    自有 ID:OTP-11208

  • 修正 abcast() 函數註解中的錯字。感謝 Johannes Weissl。

    自有 ID:OTP-11219

  • 使 edlin 理解一些重要的控制鍵。感謝 Stefan Zegenhagen。

    自有 ID:OTP-11251

  • 從 digraph 模組匯出 edge/0 類型。感謝 Alex Ronne Petersen。

    自有 ID:OTP-11266

  • 修正 erl_lint 中的變數使用追蹤,並修正 try 表達式中不安全的變數追蹤。感謝 Anthony Ramine。

    內部 ID:OTP-11268

STDLIB 1.19.2

已修正的錯誤與故障

  • Erlang 掃描器不再接受輸入字串中的浮點數。

    內部 ID:OTP-10990

  • 當使用 unicode:characters_to_list 將錯誤的二進制資料轉換為列表時,錯誤的回傳值可能包含錯誤的「剩餘部分」,也就是說,無法轉換的字元 io_list 是錯誤的。只有在輸入是子二進制資料且轉換來自 utf8 時才會發生這種情況。現在已修正此問題。

    內部 ID:OTP-11080

  • 在 Erlang Pretty Printer erl_pp 中,類型 hook_function() 已被修正。

    無效形式的列印(例如記錄欄位類型)也已修正。自 R16B 以來一直存在問題。

    (感謝 Tomáš Janoušek。)

    內部 ID:OTP-11100

  • 修正 erl_eval 中對 BEAM 模組的 receive 支援。感謝 Anthony Ramine。

    內部 ID:OTP-11137

改進與新功能

  • 刪除關於簡單一對一監管器的過時註解。感謝 Magnus Henoch。

    內部 ID:OTP-10938

  • 當選擇以 Erlang 編寫的腳本 (escript) 的編碼時,現在會識別第二行的可選指令。

    內部 ID:OTP-10951

  • 已為函數 erl_parse:abstract/2 編寫文件。

    內部 ID:OTP-10992

  • 整合來自 Andreas Schultz 的橢圓曲線貢獻

    為了能夠支援 SSL/TLS 中的橢圓曲線密碼套件,已在 public_key 和 crypto 中新增處理橢圓曲線基礎結構的功能。

    這也導致了 crypto API 的重寫,以獲得一致性並消除不必要的額外負荷。所有使用 crypto 的 OTP 應用程式都已更新以使用新的 API。

    影響:橢圓曲線密碼學 (ECC) 提供與其他公開金鑰演算法相當的安全性,但金鑰大小更小。較小的金鑰大小可節省電力、記憶體、頻寬和計算成本,這使得 ECC 對於受限環境特別有吸引力。

    內部 ID:OTP-11009

  • 新增 sys:get_state/1,2 和 sys:replace_state/2,3。感謝 Steve Vinoski。

    內部 ID:OTP-11013

  • gen 機制的最佳化。感謝 Loïc Hoguin。

    內部 ID:OTP-11025

  • gen.erl 的最佳化。感謝 Loïc Hoguin。

    內部 ID:OTP-11035

  • 在適用的地方使用 erlang:demonitor(Ref, [flush])。感謝 Loïc Hoguin。

    內部 ID:OTP-11039

  • 具有非 ASCII 字元的 Erlang 原始檔現在以 UTF-8 編碼(而不是 latin1)。

    內部 ID:OTP-11041 輔助 ID:OTP-10907

  • 修正 rest_for_one 和 one_for_all 無法重新啟動未終止的子程序。感謝 James Fish。

    內部 ID:OTP-11042

  • 修正 timer_server 的過度 CPU 消耗。感謝 Aliaksey Kandratsenka。

    內部 ID:OTP-11053

  • 將 lists:zf/2 重新命名並記錄為 lists:filtermap/2。感謝 Anthony Ramine。

    內部 ID:OTP-11078

  • 修正 epp 中不一致的狀態。感謝 Anthony Ramine

    內部 ID:OTP-11079

  • c:ls(File) 現在將列印 File,類似於 Unix 中的 ls(1)。錯誤訊息也已改進。(感謝 Bengt Kleberg。)

    內部 ID:OTP-11108

  • 支援 erl_pp 中的回呼屬性。感謝 Anthony Ramine。

    內部 ID:OTP-11140

  • 改進 erl_lint 的效能。感謝 José Valim。

    內部 ID:OTP-11143

STDLIB 1.19.1

已修正的錯誤與故障

  • 已修正 erl_eval 模組中與 Unicode 相關的錯誤。

    內部 ID:OTP-10622 輔助 ID:kunagi-351 [262]

  • filelib:wildcard("some/relative/path/*.beam", Path) 將無法比對任何檔案。也就是說,如果模式的第一個元件不包含任何萬用字元,則 filelib:wildcard/2 將無法運作。(先前在 R15B02 中嘗試修正此問題似乎讓情況變得更糟。)

    (感謝 Samuel Rivas 和 Tuncer Ayaz。)

    對於 Path 引數也有不相容的變更。不再允許使用二進制資料。

    * 潛在的不相容性 *

    內部 ID:OTP-10812

改進與新功能

  • 新的 STDLIB 應用程式變數 shell_strings 可用於判斷 Erlang shell 如何輸出整數列表。新的函數 shell:strings/1 會切換變數的值。

    控制序列修飾符 l 可用於關閉 ~p~P 的字串辨識功能。

    內部 ID:OTP-10755

  • 由於 Unicode 支援而進行的雜項更新。

    內部 ID:OTP-10820

  • 擴充 ~ts 以處理以 ISO-latin-1 編碼的字元二進制資料

    內部 ID:OTP-10836

  • erl 的 +pc 旗標可用於設定被視為可列印的字元範圍。這會影響 shell 和 io:format("~tp",...) 功能如何進行啟發式字串偵測。更多資訊可於 STDLIB 使用者指南中閱讀。

    內部 ID:OTP-10884

STDLIB 1.19

已修正的錯誤與故障

  • 傳遞給 filelib:wildcard/2 的萬用字元(例如 "some/path/*")將無法比對任何檔案。(感謝 Samuel Rivas 回報此錯誤。)

    內部 ID:OTP-6874 輔助 ID:kunagi-190 [101]

  • 修正 proc_lib:start 中的錯誤處理,如果在 init 中產生的程序死亡,則可能會掛起。

    內部 ID:OTP-9803 輔助 ID:kunagi-209 [120]

  • 允許 filelib:wildcard 中使用 **

    兩個相鄰的 * 用作單一模式將比對所有檔案和零個或多個目錄和子目錄。(感謝 José Valim)

    內部 ID:OTP-10431

  • 在 re:replace/3,4 中新增 \gN 和 \g{N} 語法以用於反向參考,以允許與數字取代字串一起使用。(感謝 Vance Shipley)

    內部 ID:OTP-10455

  • 匯出 ets:match_pattern/0 類型(感謝 Joseph Wayne Norton)

    內部 ID:OTP-10472

  • 修正使用 ~W 在深度 1 列印空二進制資料的問題(感謝 Andrew Thompson)

    內部 ID:OTP-10504

  • base64 模組中的類型 ascii_string() 已被修正。類型 file:file_info() 已被清除。類型 file:fd() 在文件中已設為不透明。

    內部 ID:OTP-10624 輔助 ID:kunagi-352 [263]

改進與新功能

  • 在使用繫結鍵遍歷時(僅比對具有正確鍵的物件時),Dets 表格不再是固定的。此最佳化會影響函數 match/2match_object/2select/2match_delete/2select_delete/2

    內部 ID:OTP-10097

  • 已實作 Unicode 支援。

    內部 ID:OTP-10302

  • linter 現在會警告未匯出的不透明類型,以及未充分指定的不透明類型。

    內部 ID:OTP-10436

  • filename 模組中的下列函數中,類型 file:name() 已取代類型 file:filename()absname/2absname_join/2join/1,2split/1

    內部 ID:OTP-10474

  • 如果子程序在其啟動函數中失敗,則先前的錯誤原因僅作為錯誤處理程序的錯誤報告回報,並且 supervisor:start_link 只會傳回 {error,shutdown}。此行為已變更,因此監管器現在將傳回 {error,{shutdown,Reason}},其中 Reason 會識別失敗的子程序及其錯誤原因。(感謝 Tomas Pihl)

    * 潛在的不相容性 *

    內部 ID:OTP-10490

  • 在必要時,已在 Erlang 檔案中新增說明編碼的註解。當 UTF-8 成為預設編碼時,註解會在 Erlang/OTP R17B 中移除。

    內部 ID:OTP-10630

  • 模組 erl_scansys 的合約和類型已修正並改進。(感謝 Kostis Sagonas。)

    內部 ID:OTP-10658

  • 當 Erlang shell 遇到 Erlang 掃描器錯誤時,現在會跳過該行的其餘部分。

    內部 ID:OTP-10659

  • 清除 proplists 模組中的一些規格。(感謝 Kostis Sagonas。)

    內部 ID:OTP-10663

  • 修正了一些超出 PDF 頁面寬度的範例。

    內部 ID:OTP-10665

  • 啟用 escript 在指令碼檔案沒有 shebang 時接受模擬器引數。感謝 Magnus Henoch

    內部 ID:OTP-10691

  • 修正 queue:out/1、queue:out_r/1 中的錯誤,在最差情況下會使其 O(N^2)。感謝 Aleksandr Erofeev。

    內部 ID:OTP-10722

  • epp 模組中有新的函數可從檔案讀取字元編碼。請參閱 epp 以取得更多資訊。

    內部 ID:OTP-10742 輔助 ID:OTP-10302

  • 已針對 Unicode 調整 io_lib 中的函數。現有的函數 write_string() 等現在採用 Unicode 字串,而舊的行為已由新的函數 write_latin1_string() 等接管。也有新的函數可以將 Unicode 字串寫入為 Latin-1 字串,主要針對 Erlang pretty printer (erl_pp)。

    內部 ID:OTP-10745 輔助 ID:OTP-10302

  • 新的函數 proc_lib:format/2erl_parse:abstract/2 接受編碼作為第二個引數。

    內部 ID:OTP-10749 輔助 ID:OTP-10302

  • 增加 ETS 中 write_concurrency 選項的潛在並行性。內部表格鎖的數量已從 16 個增加到 64 個。這使得兩個同時寫入相同表格的並行程序發生衝突的機率降低了四倍,從而實現了序列化。代價是使用 write_concurrency 的表格的固定記憶體佔用量增加。每個插入記錄的記憶體消耗不受影響。如果 write_concurrencyread_concurrency 結合使用,則增加的佔用空間可能會特別大。

    內部 ID:OTP-10787

STDLIB 1.18.3

已修正的錯誤與故障

  • 小型測試更新

    內部 ID:OTP-10591

STDLIB 1.18.2

已修正的錯誤與故障

  • 修正了在 Windows 上給定無效磁碟機代號時,確保目錄會進入無限迴圈的錯誤。

    內部 ID:OTP-10104

  • 對具有全域範圍且未指定逾時的 ServerName 的 gen_server:enter_loop/4 的呼叫現在可以正常運作。

    感謝 Sam Bobroff 回報此問題。

    內部 ID:OTP-10130

  • 修正 escript/主要封存檔重新載入問題

    如果 escript/主要封存檔在加入程式碼路徑後,其修改時間 (mtime) 發生變更,則正確重新載入封存檔並更新快取。(感謝 Tuncer Ayaz)

    專屬 ID:OTP-10151

  • 修正某些情況下,使用 compressed 選項的 ETS 表格中可能會導致二進位資料損毀的錯誤。

    專屬 ID:OTP-10182

  • 修正 Win32 上 filename:nativename/1 的問題

    修正 Win32 上,路徑以二進位引數形式給定時會發生的問題。感謝 Jan Klötzke

    專屬 ID:OTP-10188

  • 修正 ets:test_ms/2 中使用 match spec 中的 '$_' 時可能導致模擬器當機的錯誤。

    專屬 ID:OTP-10190

  • 修正 zip 封存檔錯誤地將第一個磁碟編號設定為 1 的錯誤

    專屬 ID:OTP-10223

改進和新功能

  • 更正 Erlang Shell 列印的 badarith 錯誤說明訊息。(感謝 Matthias Lang)

    專屬 ID:OTP-10054

STDLIB 1.18.1

修正錯誤和故障

  • 從文件和程式碼中移除了對 is_constant/1 (已在 R12 版本中移除) 的參考。

    專屬 ID:OTP-6454 輔助 ID:seq10407

  • 在 supervisor 的重新啟動迴圈中將控制權交還給 gen_server

    當嘗試重新啟動子程序失敗時,supervisor 先前會保持執行流程,並不斷嘗試重新啟動子程序,直到成功或達到重新啟動頻率限制為止。如果沒有發生這些情況,supervisor 會永遠停留在這個迴圈中。

    此提交加入一個 0 毫秒的計時器,其中控制權將交還給實作 supervisor 的 gen_server。這樣,任何傳入 supervisor 的請求都會被處理,這可能有助於打破無限迴圈,例如 supervisor 或有問題子程序的關閉請求。

    由於 supervisor 的新傳回值,這會在 stdlib 中引入一些不相容性

    • restart_child/2 現在可以傳回 {error,restarting}
    • delete_child/2 現在可以傳回 {error,restarting}
    • which_children/1 傳回 {Id,Child,Type,Mods} 的清單,其中 Child 除了舊的 pid() 或 'undefined' 之外,現在也可以是 'restarting'。

    * 潛在的不相容性 *

    專屬 ID:OTP-9549

  • 如果暫時子程序的啟動函式傳回 'ignore',則 supervisor 會保留其子程序規格。此問題已修正。不應保留不存在的暫時子程序的子程序規格。

    專屬 ID:OTP-9782 輔助 ID:seq11964

  • 在錯誤記錄器中使用通用時間作為基準

    先前的轉換使用已棄用的 calendar:local_time_to_universal_time/1

    專屬 ID:OTP-9854

  • 如果存在具有相同名稱的本機定義,則從 guard 中的頂層呼叫 guard 測試 (例如 is_list/1) 會導致編譯器當機。已修正為拒絕程式並顯示錯誤訊息。

    專屬 ID:OTP-9866

  • 修正 binary:part/3 文件中的類型規格 (感謝 Ricardo Catalinas Jiménez)

    專屬 ID:OTP-9920

  • 更正 registered 的拼寫 (感謝 Richard Carlsson)

    專屬 ID:OTP-9925

  • 將 gb_trees 文件按字母順序排列 (感謝 Aidan Hobson Sayers)

    專屬 ID:OTP-9929

  • 修正在 64 位元電腦上,使用 compressed 選項且插入包含大整數 (>2G) 的 term 時,ETS 中發生的錯誤。此錯誤被認為會導致模擬器當機。(感謝 Diego Llarrull 提供出色的錯誤報告)

    專屬 ID:OTP-9932

  • 為替代名稱查詢新增外掛程式支援。此修補程式引入一種定位行為執行個體的新方法:{via, Module, Name}。(感謝 Ulf Wiger)

    專屬 ID:OTP-9945

  • digraph_utils:condensation/1 函式過去會建立一個包含迴圈的有向圖,這與說明文件指出所建立的有向圖沒有循環矛盾。此錯誤已修正。(感謝 Kostis Sagonas 發現此錯誤。)

    專屬 ID:OTP-9953

  • 當 escript 結束時,現在所有列印到標準輸出和標準錯誤的內容都會顯示在終端機上。此錯誤已透過變更 erlang:halt/0,1 的行為來修正,這也應修正其他類似 escript 的應用程式的相同問題,也就是列印在 TTY 上並透過 erlang:halt/0,1 結束時,儲存在輸出埠驅動程式緩衝區中的資料會遺失。

    BIF:s erlang:halt/0,1 已改進語意,並且有一個新的 BIF erlang:halt/2 來完成類似舊語意的操作。請參閱文件。

    現在,具有整數引數的 erlang:halt/0 和 erlang:halt/1 將關閉所有埠,並允許所有擱置的非同步執行緒操作在模擬器結束前完成。先前,erlang:halt/0 和 erlang:halt(0) 只會等待擱置的非同步執行緒操作,而不會關閉埠。而具有非零整數引數的 erlang:halt/1 甚至不會等待擱置的非同步執行緒操作。

    若要大致回復舊行為,在結束模擬器時不等待埠和非同步執行緒操作,您可以使用具有第一個整數引數和包含 {flush,false} 的選項清單的 erlang:halt/2 作為第二個引數。請注意,現在刷新與結束程式碼無關,而且您無法只刷新非同步執行緒操作,我們認為這無論如何都是一種奇怪的行為。

    此外,erlang:halt/1,2 還有一個新功能:如果第一個引數是原子 'abort',則模擬器會中止並產生核心傾印,前提是作業系統允許。

    專屬 ID:OTP-9985

  • 為 escript win32 新增替代調用。現在可以將 escript 作為 "escript.exe" 和 "escript" 啟動 (感謝 Pierre Rouleau)

    專屬 ID:OTP-9997

STDLIB 1.18

修正錯誤和故障

  • 改進 random 模組中的演算法。避免使用偶數質數除數的種子值,從而防止取得卡在零的子種子。最糟糕的情況是 random:seed(0,0,0),它會產生一系列零。從某種意義上來說,這是一個不相容的變更,因為依賴於為給定種子重現特定序列的應用程式將會失敗。偽隨機輸出仍然是確定性的,但與先前的版本不同。

    * 潛在的不相容性 *

    專屬 ID:OTP-8713

  • 由於後者並不安全,因此已將對 global:whereis_name/1 的呼叫替換為對 global:safe_whereis_name/1 的呼叫。

    之前沒有這樣做的原因是,設定全域鎖會隱藏一個關於受監督子程序重新啟動的錯誤。現在已透過修改 global:whereis_name/1 來修正此錯誤。(感謝 Ulf Wiger 提供程式碼貢獻。)

    已修正在 gen_fsm:start* 中的一個小競爭條件:如果這些函式之一傳回 {error, Reason} 或 ignore,則名稱仍然可以註冊 (在本機或 global 中)。(這與 OTP-7669 中對 gen_server 所做的修改相同。)

    已移除未記載的函式 global:safe_whereis_name/1

    專屬 ID:OTP-9212 輔助 ID:seq7117, OTP-4174

  • 如果 supervisor 的子程序以原因 {shutdown,Term} 終止,則現在會由 supervisor 像原因為 'shutdown' 一樣處理。

    對於重新啟動類型為 'permanent' 的子程序,這表示沒有變更。對於重新啟動類型為 'transient' 的子程序,子程序將不再重新啟動,也不會寫入任何 supervisor 報告。對於重新啟動類型為 'temporary' 的子程序,不會寫入任何 supervisor 報告。

    * 潛在的不相容性 *

    專屬 ID:OTP-9222

  • 稍為改進關於暫時和暫態子程序之 supervisor 重新啟動策略的文件。

    專屬 ID:OTP-9381

  • 具有足夠大儲存桶的 Dets 表格並非總是能修復。此錯誤已修正。

    Dets 檔案的格式已修改。當降級時,將會修復使用新系統建立的表格。否則,修改應該不會引起注意。

    專屬 ID:OTP-9607

  • 已更正 lists 模組中的一些合約。

    專屬 ID:OTP-9616

  • 在 stdlib 的行為中新增 '-callback' 屬性

    使用所有回呼的 -callback' 屬性取代 stdlib 行為中的 behaviour_info(callbacks) 匯出。使用關於回呼屬性的資訊更新文件 從 '-callback' 屬性自動產生 'behaviour_info' 函式

    'behaviour_info(callbacks)' 是一個在描述行為的模組中定義的特殊函式,並傳回其回呼清單。

    現在,此函式會使用 '-callback' 規格自動產生。如果使用者同時定義 '-callback' 屬性和 behaviour_info/1 函式,則 lint 會傳回錯誤。如果回呼不需要類型資訊,請使用其泛型規格。將 '-callback' 屬性新增至語言語法

    行為可以使用熟悉的規格語法為其回呼定義規格,並將 '-spec' 關鍵字取代為 '-callback'。執行簡單的 lint 檢查,以確保不會重複定義回呼,且宣告所有參考的類型。

    然後,工具可以使用這些屬性來提供行為的文件或找出回呼模組中回呼定義的差異。

    將回呼規格新增至核心中的 'application' 模組 依照網際網路文件將回呼規格新增至 tftp 模組 依照可能已棄用的註解將回呼規格新增至 inets_service 模組

    專屬 ID:OTP-9621

  • 如果 Dets 表格已正確關閉,但無法讀取空間管理資料,則無法修復該檔案。此錯誤已修正。

    專屬 ID:OTP-9622

  • Unicode 非字元程式碼點 16#FFFE 和 16#FFFE 不允許使用 unicode 模組或位元語法來編碼或解碼。這與可以編碼/解碼的其他非字元 16#FDD0 到 16#FDEF 不一致。為了解決不一致的問題,現在可以編碼和解碼 16#FFFE 和 16#FFFE。(感謝 Alisdair Sullivan。)

    * 潛在的不相容性 *

    專屬 ID:OTP-9624

  • 當包含另一個檔案時,讓 epp 先搜尋目前檔案的目錄 這完成了 R11 中只適用於 include_lib() 的部分修正。(感謝 Richard Carlsson)

    專屬 ID:OTP-9645

  • ms_transform:修正不正確的「變數被遮蔽」警告

    此修補程式會移除從一個函式子句到另一個函式子句不正確地傳遞變數繫結的情況。(感謝 Haitao Li)

    專屬 ID:OTP-9646

  • 在 supervisor 中明確終止動態子程序

    根據監管者的文件:「關於 simple-one-for-one 監管者的重要注意事項:simple-one-for-one 監管者動態建立的子程序,無論關閉策略為何,都不會被明確終止,而是預期在監管者終止時(也就是收到來自父程序的結束訊號時)終止。」

    當我們手動停止 simple_one_for_one 監管者時,一切都很好。動態子程序會捕獲來自監管者的結束訊號並離開。但是,如果發生在我們停止應用程式時,在頂層監管者停止後,應用程式主程序會終止與此應用程式相關的所有剩餘程序。因此,捕獲結束訊號的動態子程序可能會在清理期間(這裡指的是 terminate/2 內部)被終止。這是不可預測且高度依賴時間的。

    在此提交中,監管者模組已修補,會根據關閉策略明確終止動態子程序。

    注意:動態子程序停止的順序未定義。事實上,這「幾乎」是同時完成的。

    停止動態子程序時發生堆疊錯誤

    由於 simple_one_for_one 監管者可能有多個工作者,我們在關閉期間會堆疊錯誤,以便針對每個遇到的錯誤類型僅報告一則訊息。我們不報告子程序的 PID,而是使用相關子程序的數量。(感謝 Christopher Faulet)

    自有 ID:OTP-9647

  • 允許無限逾時來關閉工作者程序

    現在,在子程序規格中,工作者子程序的關閉值也可以設定為無限。此限制已移除,因為並非總是能夠預測工作者的關閉時間。這高度取決於應用程式。在文件中新增關於工作者關閉策略的警告(感謝 Christopher Faulet)

    自有 ID:OTP-9648

  • 在列印錯誤報告且子程序 PID 未定義時,監管者中偶爾會發生 badarg 錯誤。此問題已修正。

    自有 ID:OTP-9669

  • 修正 re:split 規格不接受選項 'global'(感謝 Shunichi Shinohara)

    自有 ID:OTP-9691

改進和新功能

  • 修正一些在 HiPE 平台上會失敗的測試。

    自有 ID:OTP-9637

  • 現在,在 'fun M:F/A' 中允許使用變數,如 Richard O'Keefe 在 EEP-23 中所建議的。

    抽象格式中 'fun M:F/A' 的表示方式已變更,且不相容。直接讀取或操作抽象格式的工具(例如解析轉換)可能需要更新。編譯器可以處理新舊格式(例如,從 pre-R15 BEAM 檔案擷取抽象格式並使用 compile:forms/1,2 編譯將會有效)。syntax_tools 應用程式也可以處理這兩種格式。

    * 潛在的不相容性 *

    自有 ID:OTP-9643

  • 元組函式(具有模組名稱和函式的雙元素元組)現在已正式棄用,並將在 R16 中移除。請改用 'fun M:F/A'。為了讓您知道您的系統正在使用元組函式,第一次套用元組函式時,會將警告傳送至錯誤記錄器。

    自有 ID:OTP-9649

  • 已移除已棄用的 'regexp' 模組。請改用 're' 模組。

    * 潛在的不相容性 *

    自有 ID:OTP-9737

  • filename:find_src/1,2 現在將可在已剝離的 BEAM 檔案上運作(由 Per Hedeland 報告)。HiPE 編譯器也將可在已剝離的 BEAM 檔案上運作。BEAM 編譯器將不再將原始程式碼本身中提供的編譯選項包含在 M:module_info(compile) 中(因為如果重新編譯模組,這些選項無論如何都會套用)。

    自有 ID:OTP-9752

STDLIB 1.17.5

已修正的錯誤和故障

  • 當在使用者沒有讀取權限的父目錄內執行時,erl_tar:extract 失敗。此問題已修正。

    自有 ID:OTP-9368

  • 已修正 erl_scan:set_attribute/3 中的錯誤。

    自有 ID:OTP-9412

  • 已修正 io_lib:fread() 的合約。

    自有 ID:OTP-9413 輔助 ID:seq11873

  • 當嘗試比對文字字元時,遇到輸入資料結尾時,io_lib:fread/2 中發生崩潰,該函式應該傳回 {more,_,_,_},但卻發生崩潰。此問題已修正。由 Klas Johansson 報告。

    當在任何欄位資料之前遇到檔案結尾時,io:fread 的類似特殊情況也已修正。

    自有 ID:OTP-9439

  • 已修正 timer:now_diff() 的合約。(感謝 Alex Morarash)。

    自有 ID:OTP-9450

  • 修正 gen_fsm 文件中的小錯字(感謝 Haitao Li)

    自有 ID:OTP-9456

  • 已修正 zip:zip_list_dir/1zip:zip_get/2 的合約。

    自有 ID:OTP-9471 輔助 ID:seq11887, OTP-9472

  • 已修正 zip:zip_open() 中的錯誤。

    自有 ID:OTP-9472 輔助 ID:seq11887, OTP-9471

  • 修正一些簡單的文件錯誤(感謝 Matthias Lang)

    自有 ID:OTP-9498

  • 新增 proplist() 類型

    最近我在新增 API 的規格時,發現沒有定義標準的 proplist() 類型。(感謝 Ryan Zezeski)

    自有 ID:OTP-9499

  • 修正監管者重新啟動暫時子程序的問題

    在目前的監管者實作中,暫時子程序永遠不應重新啟動。但是,當暫時子程序在 one_for_all 或 rest_for_one 策略中重新啟動時,其中失敗的程序不是暫時子程序,監管者仍然會嘗試重新啟動它。

    由於監管者不會保留暫時子程序的某些 MFA 資訊,這會導致監管者達到其重新啟動限制並崩潰。

    此修補程式透過在 terminate_children/2-3(私有函式)中插入一個子句來修正此行為,該子句將在建立已終止程序的清單時省略暫時子程序,以避免監管者再次嘗試重新啟動它們。

    只有需要重新啟動子程序的監管者會使用該清單,因此對於僅呼叫 terminate_children/2-3 來終止所有子程序的函式,此變更應該不會有影響。

    文件已修改,以更明確地說明此行為。(感謝 Fred Hebert)

    自有 ID:OTP-9502

  • 修正損壞的 edoc 註解(感謝 Richard Carlsson)

    自有 ID:OTP-9516

  • 已修正 XML 檔案。

    自有 ID:OTP-9550 輔助 ID:OTP-9541

  • 處理密碼金鑰伺服器功能中罕見的競爭情況

    自有 ID:OTP-9586

改進和新功能

  • 已新增類型和規格。

    自有 ID:OTP-9356

  • 已修改 queue 模組的合約。

    自有 ID:OTP-9418

  • 已改進 STDLIB 和 Kernel 中的合約,並修正類型錯誤。

    自有 ID:OTP-9485

  • 已擴充/修正數個 BIF 的類型。此外,已修正 lists:keyfind/3lists:keysearch/3lists:keyemember/3 的類型。不正確/不完整的類型可能會導致錯誤的 dialyzer 警告。

    自有 ID:OTP-9496

STDLIB 1.17.4

已修正的錯誤和故障

  • 預設值 undefined 以一種方式新增至記錄欄位類型,使得結果並非總是格式良好的類型。此錯誤已修正。

    自有 ID:OTP-9147

  • 以原子方式更新索引檔案

    由於 log_mf_h 索引檔案可能會被錯誤處理程式以外的其他程序讀取(例如,rb 工具),因此應該以原子方式更新此檔案。這將避免在以寫入模式開啟檔案(從而清空檔案)和使用新內容實際更新之間發生時間間隔。為此,會寫入一個暫存檔,並使用 file:rename/1 來取代實際的索引檔案。

    自有 ID:OTP-9148

  • 修正文件中各處的各種錯字(感謝 Tuncer Ayaz)

    自有 ID:OTP-9154

  • 監管者不應儲存已終止的暫時程序的子程序規格,因為它們不應重新啟動。儲存暫時子程序規格將導致您無法使用與已終止的暫時程序相同的子程序規格來啟動新的暫時程序。自 R14B02 起,您無法重新啟動暫時暫時程序,因為引數不再儲存,但重新啟動暫時程序在語義上一直都是不正確的。感謝 Filipe David Manana 報告此問題並建議解決方案。

    自有 ID:OTP-9167 輔助 ID:OTP-9064

  • 各種小型的文件修正(感謝 Bernard Duggan)

    自有 ID:OTP-9172

  • 修正未註冊 gen_event 程序的 format_status 錯誤

    將 format_status 的 gen_fsm 程式碼移植到 gen_event,以防止在未註冊的 gen_event 程序上呼叫 sys:get_status/1 時發生 lists:concat([...,pid()]) 崩潰。

    將 format_status 標頭程式碼從 gen_* 行為重構到模組 gen。

    擴充 gen_event_SUITE 中的 format_status 測試,以涵蓋匿名 gen_event 程序的 format_status 錯誤。(感謝 Geoff Cant)

    自有 ID:OTP-9218

  • 針對動態暫時子程序,監管者中的 pid 清單已變更為「set」。當新增/刪除許多子程序時,存取清單的效能會不佳。(感謝 Evgeniy Khramtsov)

    自有 ID:OTP-9242

  • 變更 pool 模組以嘗試附加到已在執行的節點

    對於已在執行的節點,pool 模組會列印錯誤訊息,且不會採取進一步動作。此修補程式變更了該行為,因此如果從 slave:start/3 傳回 {already_running, Node},則仍會嘗試附加到該節點。這是合理的,因為使用者已在 .hosts.erlang 檔案中指定節點,表示希望該節點成為 pool 的一部分,且在 pool 啟動後可以成功手動附加。(感謝 Kelly McLaughlin)

    自有 ID:OTP-9244

  • unicode: 文件 16#FFFE 和 16#FFFF(非字元)(感謝 Tuncer Ayaz)

    自有 ID:OTP-9256

  • re:在 manpage 中移除多餘的「it」(感謝 Tuncer Ayaz)

    自有 ID:OTP-9307

  • 已修正 erl_eval(3) 中的錯誤。

    自有 ID:OTP-9322

改進和新功能

  • 新增 timer:tc/1 並移除 tc/2tc/3 中的 catch。因此,時間測量函式將不再捕獲被測量函式導致的結束、錯誤或擲回。

    * 潛在的不相容性 *

    自有 ID:OTP-9169

  • 允許針對 simple_one_for_one 監管者使用 supervisor:terminate_child(SupRef,Pid)

    如果監管者使用重新啟動策略 simple_one_for_one,則先前不允許使用 supervisor:terminate_child/2。現在已變更,可以透過指定子程序的 Pid 來終止此類型監管者的子程序。

    (感謝 Vance Shipley。)

    自有 ID:OTP-9201

  • 已新增類型和規格。

    自有 ID:OTP-9267

  • Erlang 類型和規格用於文件。

    自有 ID:OTP-9271

  • 允許 Dets 表格名稱為任意詞彙。

    自有 ID:OTP-9282

  • 已修正可能導致 Dialyzer 出現問題的規格。erl_eval 中的不透明型別已轉為普通型別。這是一個暫時性的修正。

    自有 ID:OTP-9333

STDLIB 1.17.3

已修正的錯誤和故障

  • 修正了 io:format 中 ~F.~Ps 的兩個錯誤。當 length(S) >= abs(F) > P 時,會錯誤地忽略精度 P。當 F == P > length(S) 時,結果會錯誤地靠左對齊。此錯誤由 Ali Yakout 發現,他也提供了修正。

    自有 ID:OTP-8989 輔助 ID:seq11741

  • 修正 io 模組中的例外產生

    某些函式在出現 badarg 例外時,沒有產生正確的 badarg 例外。

    自有 ID:OTP-9045

  • 修正 dict 和 orddict 模組的文件

    修正了文法和一個不一致之處(使用 Key - Value 而非 key/value,因為其他地方都使用前者)。(感謝 Filipe David Manana)

    自有 ID:OTP-9083

  • 在 stdlib 的 calendar 模組中新增 ISO 週數計算函式

    這項新功能在 stdlib 應用程式的 calendar 模組中新增了缺少的週數函式。此實作符合 ISO 8601 標準。此新功能已實作、測試和記錄。(感謝 Imre Horvath)

    自有 ID:OTP-9087

改進和新功能

  • 實作 RFC4648 中關於填充字元的 'MAY' 子句,以使 mime_decode() 和 mime_decode_to_string() 函式更能容忍錯誤填充的 base64。為方便參考,以下引用 RFC。

    「RFC4648 第 3.3 節關於 MIME 解碼:此外,如果填充字元 "=" 出現在編碼資料的末尾之前,此類規格可以忽略該填充字元,並將其視為非字母資料。如果字串末尾發現超過允許數量的填充字元(例如,以 "===" 結尾的 base64 字串),也可以忽略多餘的填充字元。」

    自有 ID:OTP-9020

  • Supervisor 將不再為暫時程序儲存啟動參數,因為它們不會重新啟動。對於簡單的 one_for_one worker,例如 ssl 連線程序,這將大幅減少 supervisor 的記憶體佔用量。

    自有 ID:OTP-9064

  • 當執行 escript 時,現在可以新增 -n 旗標,escript 將使用 +native 進行編譯。

    自有 ID:OTP-9076

STDLIB 1.17.2.1

已修正的錯誤和故障

  • R14B01 版本中,數個標準函式庫的型別規格不正確。現在已修正。這些修正與 re、io、filename 以及模組 erlang 本身的型別有關。

    自有 ID:OTP-9008

STDLIB 1.17.2

已修正的錯誤和故障

  • 當多個用戶端同時存取 Dets 表格時,其中一個用戶端呼叫 dets:insert_new/2,Dets 伺服器可能會當機。或者,在相同條件下,有時會傳回 ok 而非 true。(感謝 John Hughes。)

    自有 ID:OTP-8856

  • 當多個用戶端同時存取 Dets 表格時,由於 Dets 檔案被截斷,有時會遺失插入或更新的物件。(感謝 John Hughes。)

    自有 ID:OTP-8898

  • 當多個用戶端同時存取 Dets 表格時,有時會丟棄對 Dets 伺服器內部狀態的修改。症狀多樣:出現原因為 bad_object 的錯誤;lookup() 未傳回插入的物件;等等。(感謝 John Hughes。)

    自有 ID:OTP-8899

  • 如果在呼叫 bchunk/2match/1,3match_object/1,3select/1,3 後關閉 Dets 表格,然後再次開啟,後續使用傳回的繼續值的呼叫通常會傳回回覆。此錯誤已修正;現在呼叫會因原因 badarg 而失敗。

    自有 ID:OTP-8903

  • Cover 沒有為包含 include 指示詞的檔案(例如 Yecc 剖析器)收集涵蓋率資料。此錯誤已透過修改 Erlang 程式碼預處理器 epp 來修正。

    自有 ID:OTP-8911

  • 如果開啟的 Dets 表格的槽位少於鍵值,然後僅在查詢後關閉,則其內容不再格式良好。此錯誤已修正。(感謝 Matthew Evans。)

    自有 ID:OTP-8923

  • 在 supervisor 中,當其終止子程序時,如果該子程序碰巧提早一小部分時間以正常狀態結束,supervisor 會將其回報為錯誤。不應將其回報為錯誤。

    * 潛在的不相容性 *

    自有 ID:OTP-8938 輔助 ID:seq11615

改進和新功能

  • 文件 filelib:wildcard/1,2 現在描述萬用字元的字元集語法。

    自有 ID:OTP-8879 輔助 ID:seq11683

  • 已防止 erlcdialyzertyperrun_testheartescripterlexec 中發生緩衝區溢位。

    (感謝 Michael Santos。)

    自有 ID:OTP-8892

  • 使用浮點數作為 string:copies/2 的副本數量會導致無限迴圈。現在會改為失敗並產生例外。(感謝 Michael Santos。)

    自有 ID:OTP-8915

  • 新增 ETS 選項 compressed,以更緊湊的儲存格式來啟用,但會增加表格操作的負擔。對於測試和評估,可以使用 erl +ec 來強制壓縮所有 ETS 表格。

    自有 ID:OTP-8922 輔助 ID:seq11658

  • Dets 表格的預設最大槽位數已變更為等於最大槽位數。(感謝 Richard Carlsson。)

    自有 ID:OTP-8959

STDLIB 1.17.1

已修正的錯誤和故障

  • 在文件中,reference() 已取代 ref()。

    自有 ID:OTP-8733

改進和新功能

  • 如果 fun 標頭遮蔽周圍的變數,ms_transform 現在會發出警告(就像在相同內容中針對一般 fun 發出的警告一樣)。

    自有 ID:OTP-6759

  • 現在已記錄 ets:select_reverse/{1,2,3}。

    自有 ID:OTP-7863

  • 已重寫 ethread 函式庫的很大一部分。ethread 函式庫是 Erlang 執行階段系統內部的可攜式執行緒函式庫,供執行階段系統本身使用。

    最值得注意的改進是讀取器最佳化的 rwlock 實作,這透過避免 rwlock 快取行的乒乓效應,大幅提高多處理器系統上讀取鎖定/讀取解除鎖定操作的效能。讀取器最佳化的 rwlock 實作由執行階段系統中已知的頻繁讀取鎖定雜項 rwlock 使用,並且可以在建立表格時傳遞 {read_concurrency, true} 選項,在 ETS 表格上啟用。如需更多資訊,請參閱 ets:new/2 的文件。當啟動執行階段系統時,可以微調讀取器最佳化的 rwlock 實作。如需更多資訊,請參閱 erl+rg 命令列引數的文件。

    還有一個新的 rwlock 實作,未針對讀取器最佳化。這兩種實作都會在競爭期間交錯讀取器和寫入器,而不是像 NPTL (Linux) pthread rwlock 實作那樣使用讀取器或寫入器優先策略。讀取器/寫入器優先策略會造成問題,因為它會使執行非優先操作的執行緒處於飢餓狀態。

    一般而言,新的 rwlock 實作在 ERTS 中的效能優於常見的 pthread 實作。但是,在某些極度競爭的情況下,情況並非如此。這種嚴重的競爭或多或少只會出現在 ETS 表格上。當多個程序同時在同一表格上執行大量寫入鎖定操作時,就會發生這種情況。無論 rwlock 實作如何,這種 ETS 使用方式都不好,永遠不會擴充,而且我們強烈建議不要這樣做。

    新的 rwlock 實作取決於原子操作。如果找不到原生原子實作,將使用後援解決方案。使用後援解決方案會導致效能降低。也就是說,現在比以往任何時候都更重要的是使用原生原子實作來建置 OTP。

    ethread 函式庫包含適用於 x86 (32 和 64 位元)、powerpc (32 位元)、sparc V9 (32 和 64 位元) 和 tilera (32 位元) 的原生原子實作。在其他硬體上,如果存在,將使用 gcc 的內建原子記憶體存取支援。如果找不到此類支援,configure 會警告沒有可用的原子實作。

    ethread 函式庫現在也可以使用 libatomic_ops 函式庫進行原子記憶體存取。這使得 Erlang 執行階段系統能夠在比以往更多的平台上利用最佳化的原生原子操作。如果 configure 警告沒有可用的原子實作,請嘗試使用 libatomic_ops 函式庫。指定 libatomic_ops 安裝位置時,請使用 --with-libatomic_ops=PATH configure 命令列引數。libatomic_ops 函式庫可以從以下網址下載:http://www.hpl.hp.com/research/linux/atomic_ops/

    ethread 函式庫的 API 變更也導致 Erlang 執行階段系統中的修改。由於即將推出的「延遲解除配置」功能依賴 ethread 函式庫,因此也已完成準備工作。

    注意:當針對 x86 建置時,ethread 函式庫現在將使用首先出現在 pentium 4 處理器上的指令。如果您希望執行階段系統與較舊的處理器(回溯到 486)相容,則在設定系統時,需要傳遞 --enable-ethread-pre-pentium4-compatibility configure 命令列引數。

    自有 ID:OTP-8544

  • 由於向後相容性的考量,模組 erlang 中某些內建函式 (BIF) 從未被自動匯入。現在,區域函式會覆蓋自動匯入的函式,新的自動匯入不再是問題,因此以下 BIF 最終被設為自動匯入:monitor/2、monitor/3、demonitor/2、demonitor/3、error/1、error/2、integer_to_list/2、list_to_integer/2。

    專案編號:OTP-8763

STDLIB 1.17

已修正的錯誤與故障

  • 當解析 file 屬性時,Erlang 程式碼預處理器 (epp) 會向客戶端傳送額外的 {eof,Location} 格式訊息。這個在 R11B 中引入的錯誤已修正。

    專案編號:OTP-8470

  • 抽象類型 'fun' 無法由 Erlang 美化列印器 (erl_pp) 列印。這個錯誤已修正。

    專案編號:OTP-8473

  • 當給予單字 spec 時,函式 erl_scan:reserved_word/1 不再傳回 true。這個錯誤是在 STDLIB-1.15.3 (R12B-3) 中引入的。

    專案編號:OTP-8567

  • lists:keysort/2 的文件指出排序是穩定的。

    專案編號:OTP-8628,輔助編號:seq11576

  • Shell 的行編輯已改進,更接近 readline 和其他 shell 的行為。(感謝 Dave Peticolas)

    專案編號:OTP-8635

  • 在定義巨集時,Erlang 程式碼預處理器 (epp) 無法正確處理過早的輸入結束。這個在 STDLIB 1.16 中引入的錯誤已修正。

    專案編號:OTP-8665,輔助編號:OTP-7810

改進和新功能

  • 實作了 EEP31 (和 EEP9) 中的模組 binary。

    專案編號:OTP-8217

  • Erlang 美化列印器 (erl_pp) 不再在類型中引用原子。

    專案編號:OTP-8501

  • Erlang 程式碼預處理器 (epp) 現在將沒有欄位的記錄視為已輸入類型。

    專案編號:OTP-8503

  • 新增函式 zip:foldl/3 以迭代 zip 封存檔。

    新增用於建立和提取 escript 的函式。請參閱 escript:create/2escript:extract/2

    已移除未記錄的函式 escript:foldl/3。相同的功能可以使用更靈活的函式 escript:extract/2zip:foldl/3 來實現。

    記錄欄位已使用類型資訊進行註解。原始碼檔案已調整為符合 80 個字元的限制,並已移除尾隨空白。

    專案編號:OTP-8521

  • Erlang 解析器不再在沒有初始值的記錄欄位的類型中複製 singleton 類型 undefined

    專案編號:OTP-8522

  • 具有多層括號的正規表示式可能會導致緩衝區溢位。這已修正。(感謝 Michael Santos。)

    專案編號:OTP-8539

  • 在定義巨集時,點之前的右括號現在是強制性的。

    * 潛在的不相容性 *

    專案編號:OTP-8562

  • 已定義已編譯 re 模式的某些屬性,以允許進行 guard 測試。

    專案編號:OTP-8577

  • 當名稱衝突時,區域函式和匯入的函式現在會覆蓋自動匯入的 BIF。在 R14 之前的行為是自動匯入的 BIF 會覆蓋區域函式。為了避免舊程式更改行為,以下情況會產生錯誤

    • 在沒有明確模組名稱的情況下呼叫名稱與 OTP R14A 之前存在(且自動匯入)的自動匯入 BIF 名稱衝突的區域函式
    • 明確匯入名稱與 OTP R14A 之前存在(且自動匯入)的自動匯入 BIF 名稱衝突的函式
    • 使用任何形式的舊編譯器指令 nowarn_bif_clash

    如果 BIF 是在 OTP R14A 或之後新增或自動匯入的,則使用匯入或區域函式覆蓋它只會導致警告。

    為了解決衝突,您可以使用明確的模組名稱 erlang 來呼叫 BIF,或者可以使用新的編譯器指令 -compile({no_auto_import,[F/A]}). 移除該特定 BIF 的自動匯入,這樣所有在沒有明確模組名稱的情況下對區域或匯入函式的呼叫都會通過,而不會有警告或錯誤。

    此變更使得未來可以新增自動匯入的 BIF,而不會中斷或靜默地更改舊程式碼。然而,某些當前程式碼巧妙地利用舊行為或 nowarn_bif_clash 編譯器指令,可能需要變更才能被編譯器接受。

    * 潛在的不相容性 *

    專案編號:OTP-8579

  • 已移除未記錄、不受支援且已棄用的函式 lists:flat_length/1

    專案編號:OTP-8584

  • 已修正 re 中可能導致某些正規表示式比對永遠不會終止的錯誤。(感謝 Michael Santos 和 Gordon Guthrie。)

    專案編號:OTP-8589

  • 現在可以不用括號存取巢狀記錄。有關範例,請參閱參考手冊。(感謝 YAMASHINA Hio 和 Tuncer Ayaz。)

    專案編號:OTP-8597

  • 現在特別優化了只能讀取新建立的參考的 receive 語句,使其執行時間為常數,而與程序接收佇列中的訊息數量無關。此最佳化將有益於對 gen_server:call() 的呼叫。(請參閱 gen:do_call/4 以取得將被最佳化的 receive 語句範例。)

    專案編號:OTP-8623

  • beam_lib:cmp/2 函式現在以更嚴格的方式比較 BEAM 檔案。如果除了編譯資訊 ("CInf") 區塊之外有任何變更,則 BEAM 檔案將被視為不同。beam_lib:cmp/2 過去會忽略除錯資訊(對 Dialyzer 很重要)和其他不會直接更改執行時行為的區塊中的差異。

    專案編號:OTP-8625

  • 當 gen_server、gen_fsm 程序或 gen_event 異常終止時,有時程序狀態的文字表示可能會佔據錯誤日誌中的許多行,具體取決於狀態術語的定義。已新增從日誌中修剪部分狀態的機制(使用 format_status/2 回呼)。請參閱文件。

    專案編號:OTP-8630

  • 呼叫具有全域註冊名稱且不是原子的程序的 sys:get_status() 會導致當機。已修正。(感謝 Steve Vinoski。)

    專案編號:OTP-8656

  • Erlang 掃描器已新增兩個新的 token:.....

    專案編號:OTP-8657

  • 現在可以在類型和函式規格中使用計算結果為整數的運算式,而之前只允許使用整數 ("Erlang_Integer")。

    專案編號:OTP-8664

  • 編譯器能更好地最佳化記錄操作。

    專案編號:OTP-8668

  • 最近新增的 BIF erlang:min/2、erlang:max/2 和 erlang:port_command/3 現在已自動匯入(正如它們最初的意圖)。由於最近的編譯器變更 (OTP-8579),對定義自己的 min/2、max/2 或 port_command/3 函式的舊程式碼的唯一影響將是警告,仍然會使用區域函式。可以使用原始碼檔案中的 -compile({no_auto_import,[min/2,max/2,port_command/3]}). 來移除警告。

    * 潛在的不相容性 *

    專案編號:OTP-8669,輔助編號:OTP-8579

  • 現在,binary_to_term/2 是自動匯入的。如果模組有一個具有該名稱的區域函式,則這將導致編譯警告。

    * 潛在的不相容性 *

    專案編號:OTP-8671

  • 已移除預先定義的內建類型 tid()。相反,應使用 ets:tid()。

    * 潛在的不相容性 *

    專案編號:OTP-8687

STDLIB 1.16.5

已修正的錯誤與故障

  • 由於競爭條件,使用多個程序中的 filelib:ensure_dir/1 來建立相同的路徑或相同目錄結構的部分,filelib:ensure_dir/1 可能會傳回毫無意義的 {error,eexist}。已消除這種競爭條件,現在只有當存在具有相同名稱的普通檔案、裝置檔案或某些其他非目錄檔案時,才會傳回 {error,eexist}。(感謝 Tuncer Ayaz。)

    專案編號:OTP-8389

  • 已修正許多關於 re 和 unicode 的錯誤

    re:compile 不再遺失 unicode 選項,這也修正了 re:split 中的錯誤。

    re:replace 現在處理 unicode 字元串列替換引數

    re:replace 現在正確處理 unicode RE 字元串列引數

    當沒有取代任何內容時,re:replace 現在正確處理二進位 unicode 輸出。

    大部分程式碼、測試案例和錯誤隔離由 Rory Byrne 完成。

    專案編號:OTP-8394

  • 在 SMP 模擬器中,原生程式碼的載入並非完全原子,這可能會導致當機。此外,由於在 SMP 模擬器中可能會同時存取它,因此現在原生程式碼的每個 MFA 資訊表都已受到鎖定的保護。(感謝 Mikael Pettersson。)

    專案編號:OTP-8397

  • user.erl(用於 oldshell 中)已更新,以處理提示字串中的 unicode (io:get_line/{1,2})。io_lib 也已更新,以使用 't' 修飾符格式化提示 (即 ~ts 而不是 ~s)。

    專案編號:OTP-8418,輔助編號:OTP-8393

  • re 模組:在具有頂層替代的模式開頭具有選項變更的正規表示式可能會導致覆寫和/或當機。(感謝 Michael Santos。)

    專案編號:OTP-8438

改進和新功能

  • 已還原並記錄 gen_server 和 gen_fsm 回呼模組在 sys:get_status/1,2 呼叫下格式化自己狀態以進行顯示的能力。(感謝 Steve Vinoski。)

    專案編號:OTP-8324

  • c:nc/{1,2} 過去假設 BEAM 檔案是在與原始碼相同的目錄中建立的,如果不是,則無法載入程式碼。已修正為在目前目錄或 {outdir,Dir} 選項指定的目錄中尋找 BEAM 檔案。(感謝 Alex Suraci。)

    專案編號:OTP-8337

  • 現在可以在開放原始碼環境中建置文件,並在文件建置過程中修正了一些錯誤並新增了一些功能。

    - 已更新 arity 計算。

    - 在產生的連結中,已移除 bif 函式名稱中使用的模組前綴,因此連結看起來會像 "https://erlang.dev.org.tw/doc/man/erlang.html#append_element-2"" 而不是 "https://erlang.dev.org.tw/doc/man/erlang.html#erlang:append_element-2""。

    - 當載入新頁面時,增強了 HTML 文件中的選單定位。

    - 手冊頁產生中的一些更正(感謝 Sergei Golovan)

    - 法律聲明取自 XML 書籍檔案,因此 OTP 的建置流程可用於非 OTP 應用程式。

    專案編號:OTP-8343

  • Shell 的 Tab 鍵補全現在適用於帶引號的模組和函式名稱。(感謝 Ulf Wiger。)

    專案編號:OTP-8383

  • 現在,封存檔案中的明確頂層目錄是可選的。

    例如,如果封存檔 (app-vsn.ez) 僅包含 app-vsn/ebin/mod.beam 檔案,則使用封存檔的檔案資訊作為來源來偽造 app-vsn 和 app-vsn/ebin 目錄的檔案資訊。也可以列出虛擬目錄。簡而言之,如果頂層目錄不存在,它們就是虛擬的。

    專案編號:OTP-8387

  • 已實作巨集超載。(感謝 Christopher Faulet。)

    專案編號:OTP-8388

  • 可以使用新函式 shell:prompt_func/1 和新的應用程式組態參數 shell_prompt_func 自訂 Erlang Shell 提示。

    專案編號:OTP-8393

  • 改進了 escript 中已輸入記錄的處理

    專案編號:OTP-8434

  • 新增 supervisor:count_children/1,以計算正在管理的子程序數量,而不會對 which_children/1 造成記憶體影響。(感謝 Jay Nelson。)

    專案編號:OTP-8436

STDLIB 1.16.4

改進與新功能

  • 此文件現在使用大多數平台上存在的開源工具 (xsltproc 和 fop) 建置。一個可見的變更在於框架已移除。

    自有 Id: OTP-8201

  • [escript] 已移除 escript 中第一行必須以 #! 開頭的限制。

    [escript] escript 可執行檔的一些命令列選項現在已記錄在文件中。例如,您可以透過新增命令列選項,在除錯器中執行 escript。

    [escript] escript 標頭語法的說明文件已釐清。例如,標頭是選用的。這表示可以直接「執行」.erl.beam.zip 檔案。

    自有 Id: OTP-8215

  • 最佳化 array:from_orddict/1,如果 orddict 是稀疏的,它現在會更快且使用較少記憶體。

    變更 array:reset/2,它現在永遠不會擴展陣列,這在之前對於非固定陣列可能會發生。請參閱說明文件。

    自有 Id: OTP-8216

  • Erlang 美化列印器 (erl_pp) 現在會將列表推導式的前導 [ 以及位元字串推導式的前導 << 放在單獨的一行,以顯示範本的 Cover 計數器。

    自有 Id: OTP-8227

  • 編譯器現在可以識別用於 Leex 輸入檔的副檔名 ".xrl"。

    自有 Id: OTP-8232

  • 說明文件中已針對 gen_servergen_fsmgen_event 行為處理來自父處理序的 'EXIT' 訊息時,進行一些澄清。如需更多資訊,請參閱 gen_servergen_fsmgen_event 說明文件。

    自有 Id: OTP-8255 Aux Id: seq11419

  • 當載入模組時,可以使用 -on_load() 指示詞來執行函式。它已記錄在參考手冊中關於程式碼載入的章節中。

    自有 Id: OTP-8295

STDLIB 1.16.3.1

已修正的錯誤和故障

  • {spawn_opt, SpawnOptionList} 傳遞至 gen_servergen_fsm 啟動函式的選項清單時,gen:start/6 的錯誤型別規格導致 dialyzer 錯誤地發出警告。

    自有 Id: OTP-8068 Aux Id: seq11323, seq11314

STDLIB 1.16.3

已修正的錯誤和故障

  • linter 過去會因無效的 -opaque 宣告而當機。

    自有 Id: OTP-8051

  • 已修正 digraph:add_edge/5digraph:del_path/3 中的錯誤。(感謝 Crystal Din。)

    自有 Id: OTP-8066

  • 當嘗試使用 dets:insert_new() 將物件插入類型為 duplicate_bag 的 Dets 資料表時,已存在的物件有時會重複。此錯誤已修正。(感謝 Crystal Din。)

    自有 Id: OTP-8070

  • 在非常深的目錄(路徑長度為 256 個字元以上)中執行 erlc 會導致模擬器在呼叫 list_to_atom/1 時當機。(感謝 Chris Newcombe。)

    自有 Id: OTP-8124

  • Erlang 程式碼前處理器 (epp) 中已修正一些小錯誤。

    自有 Id: OTP-8130

  • Erlang Meta Interpreter (erl_eval) 中已修正一個錯誤:在位元字串推導式的範本中產生的例外狀況未正確處理。(感謝 Ulf Wiger。)

    自有 Id: OTP-8133

改進與新功能

  • re:run/3 的說明文件中缺少選項 {capture,none}

    自有 Id: OTP-8113

  • erl_scan:tokens() 傳回錯誤元組 {error, ErrorInfo, EndLocation} 時,清單 LeftOverChars 是輸入資料的其餘字元,從 EndLocation 開始。它過去是空清單。

    * 潛在的不相容性 *

    自有 Id: OTP-8129

  • Erlang Meta Interpreter (erl_eval) 在解釋 receive 運算式方面已稍微最佳化。(感謝 Richard Carlsson。)

    自有 Id: OTP-8139

  • Erlang 美化列印器 (erl_pp) 已修改為可處理型別。

    自有 Id: OTP-8150

STDLIB 1.16.2

已修正的錯誤和故障

  • 當給定 text 選項且 StartLocation 為行時,Erlang 掃描器 (erl_scan) 傳回的符號文字有時會是空的。此錯誤已修正。

    自有 Id: OTP-7965

  • 已更新 base64:decode/1 的說明文件,以指出它會移除空白。

    base64:decode/1base64:mime_decode/1 有時會失敗,而不是移除非 base64 字元。

    自有 Id: OTP-7984

  • 已修正 gen 模組中的兩個型別。

    自有 Id: OTP-8029 Aux Id: seq11296

  • array:from_orddict([])array:from_list([]) 會建構固定陣列,而不是可擴展的陣列。

    自有 Id: OTP-8033

改進與新功能

  • 直譯 escript 現在是尾端遞迴。

    已引入函式 erl_eval:expr/5。

    自有 Id: OTP-7933

  • 如果呼叫處理序的訊息佇列中有很多訊息,gen_server:call/2,3 會稍微快一些。

    自有 Id: OTP-7979

  • Random 現在支援 arity 為 1 的 seed,random:seed/1,它會採用三元組。

    自有 Id: OTP-8019

  • regexp 模組現在可以識別跳脫序列 \xXY\x{X...}

    自有 Id: OTP-8024

STDLIB 1.16.1

已修正的錯誤和故障

  • 現在 dets:open_file/1 的說明文件中指出,如果檔案未正確關閉,則會修復該檔案。(感謝 Ulf Wiger。)

    自有 Id: OTP-7895

改進與新功能

  • 除非提供新的選項 text (與 R13A 不相容),否則當起始位置是一行和一欄的配對時,Erlang 掃描器不再傳回符號的文字。

    有新的函式可存取符號的屬性:attributes_info/1,2set_attribute/3

    * 潛在的不相容性 *

    自有 Id: OTP-7892 Aux Id: OTP-7810

  • 已修正 R13A 的 Unicode 和 I/O 系統實作中的數個小故障和效能問題。

    自有 Id: OTP-7896 Aux Id: OTP-7648 OTP-7887

  • 已修正 filelib:wildcard/2 的型別規格。

    自有 Id: OTP-7915

  • 新函式:gb_sets:is_disjoint/2ordsets:is_disjoint/2gb_sets:is_disjoint/2

    自有 Id: OTP-7947

  • 已記錄 R13A 中新增的函式 gb_trees:map/2

    自有 Id: OTP-7948

STDLIB 1.16

已修正的錯誤和故障

  • 已修正 gen_server:start* 中的輕微競爭情況:如果其中一個函式傳回 {error,Reason}ignore,名稱可能仍然會註冊 (在本機或 global 中)。

    在某些情況下,由 proc_lib 啟動的處理序依賴其處理序字典不會被清除,且會在異常終止時當機,而不會產生適當的當機報告。這已修正(但如果處理序字典已被清除,則初始呼叫將不會顯示在錯誤報告中)。注意:基於記憶體節約的原因,不再需要清除處理序字典,因為實際的呼叫引數不再儲存在處理序字典中。

    自有 Id: OTP-7669

  • Erlang 前處理器在字串化巨集引數時使用了錯誤的行號。(感謝 John Hughes。)

    自有 Id: OTP-7702

  • 已修正 qlc 模組中的一個錯誤:合併聯結有時無法傳回所有答案。(感謝 Bernard Duggan。)

    自有 Id: OTP-7714

改進與新功能

  • 已將新的選項 key_equality 新增至 qlc:table/2。此選項可讓 qlc 更好地處理在比較索引鍵是否相等時使用 ==/2 的資料表 (此類資料表的範例是 qlc(3) 中的排序 ETS 資料表和 gb_table)。

    自有 Id: OTP-6674

  • 在少數情況下,函式 lists:seq/1,2 會傳回空清單,而不是像過去一樣產生例外狀況,例如 lists:seq(1, 0)。請參閱 lists(3) 以取得詳細資訊。(感謝 Richard O'Keefe。)

    * 潛在的不相容性 *

    自有 Id: OTP-7230

  • 現在已記錄在 ordered_set 中選取時所存取物件的順序。

    自有 Id: OTP-7339

  • 現在可以對 escript 和封存檔中的程式碼進行除錯。

    自有 Id: OTP-7626

  • Unicode 的支援已實作,如 EEP10 中所述。io 和 io_lib 模組支援格式化和讀取來自終端機和檔案的 unicode 資料。可以使用自動翻譯為不同 unicode 格式和從不同 unicode 格式翻譯的模式開啟檔案。「unicode」模組包含用於在外部和內部 unicode 格式之間轉換的函式,而 re 模組支援 unicode 資料。還有用於指定超出 ISO-latin-1 範圍的字串和字元資料的語言語法。

    當終端機和作業系統支援時,互動式 shell 將支援 Unicode 字元的輸入和輸出。

    請參閱 EEP 和 io/io_lib 手冊頁以及 stdlib 使用者指南以取得詳細資訊。

    I/O 通訊協定不相容

    io_Server 和用戶端之間的 io_protocol 已更新,以處理 unicode 格式的通訊協定資料。更新後的通訊協定現在已記錄在文件中。規格位於 stdlib _users 手冊_ 中,這是手冊的新部分。

    io 模組不相容

    io:put_chars、io:get_chars 和 io:get_line 都會處理並傳回 unicode 資料。在可以提供二進位資料的情況下(如 io:put_chars),它們應以 UTF-8 編碼。當傳回二進位資料時(如當 io_server 設定在 _binary 模式_ 時由 io:get_line/get_chars 傳回),傳回的資料也 _一律_ 編碼為 UTF-8。但是,檔案模組仍然會傳回位元組導向的資料,因此可以使用 file:read 而不是 io:get_chars 來讀取 ISO-latin-1 中的二進位資料。

    io_lib 模組不相容

    io_lib:format 函式在給定新的格式指令(例如 "~ts" 和 "~tc")時,可以回傳包含大於 255 的整數的列表。

    * 潛在的不相容性 *

    內部 ID:OTP-7648 輔助 ID:OTP-7580 OTP-7514 OTP-7494 OTP-7443 OTP-7181 EEP10 EEP11

  • 如果節點已連接,則函式 pool:attach/1 現在會回傳 already_attached,而不是 allready_attached(原文如此!)。(感謝 Edwin Fine。)

    內部 ID:OTP-7653 輔助 ID:OTP-7603

  • 現在允許在 escript 中使用前置處理器指令。這表示例如可以在 escript 中使用巨集。

    內部 ID:OTP-7662

  • 當使用 proc_libgen_servergen_fsm 啟動的進程因原因 {shutdown,Term} 而結束時,將不再產生崩潰報告(允許正常關閉,但仍為連結到終止進程的進程提供額外資訊)。

    內部 ID:OTP-7740 輔助 ID:seq10847

  • 新增了一個新的 BIF,lists:keyfind/3。它的運作方式與 lists:keysearch/3 類似,但如果成功,它不會將回傳的元組包裝在 value 元組中。(感謝 James Hague 建議這個函式。)

    內部 ID:OTP-7752

  • lists:suffix(Suffix, List) 過去的複雜度為 length(Suffix)*length(List)(對於某些輸入可能會變得相當慢)。現在已重新實作,使其複雜度為 length(Suffix)+length(List)。(感謝 Richard O'Keefe 提供新的實作方式。)

    內部 ID:OTP-7797

  • Erlang 掃描器已擴充,可以回傳空白字元、註解和符號的確切位置。函式 string/3tokens/4token_info/1,2 是新的。請參閱 erl_scan(3) 以取得詳細資訊。

    已修改 tokens/3,4,使其在遇到點之前的 eof 時回傳符號列表,而不是錯誤。

    內部 ID:OTP-7810

  • filelib:fold_files/5 現在使用 re 模組,而不是 regexp 模組進行正規表示式比對。實際上,對於 filelib:fold_files/5 使用的大多數正規表示式而言,此變更不會是問題。(正規表示式的主要差異在於,括號和花括號被 regexp 視為字面字元,但被 re 視為特殊字元;幸運的是,這些字元很少在檔案名稱中使用。)

    * 潛在的不相容性 *

    內部 ID:OTP-7819

  • 如果 Type 不是有效類型,digraph:new(Type) 現在會導致 badarg 例外。同樣地,如果引數無效,digraph_utils:subgraph/2,3 現在也會導致 badarg。(如果發生錯誤,這些函式過去會回傳錯誤元組。)

    * 潛在的不相容性 *

    內部 ID:OTP-7824

  • 傳遞給 random:uniform/1 的引數現在必須是整數(如文件中所述)。在先前的版本中,也允許使用浮點數。

    * 潛在的不相容性 *

    內部 ID:OTP-7827

  • 已更新版權聲明。

    內部 ID:OTP-7851

  • dbg:fun2ms 中新增了一些遺失的 match spec 函式:exception_trace/0 和 trace/2,3。

    新增了一個函式 queue:member/2。

    修正了 io_lib:fread 中的一個錯誤,該錯誤會意外地串連以換行符號分隔的欄位。由 Matthew Palmer 回報並分析至 erlang-patches。

    內部 ID:OTP-7865

STDLIB 1.15.5

已修正的錯誤和故障

  • 修正了 qlc 模組中的一個錯誤:當合併聯結兩個查詢控制代碼時,用於等效類別的暫存檔未正確截斷,這可能會導致效能不佳。

    內部 ID:OTP-7552

  • 字元 16#C0 和 16#E0(帶重音符號的 "A" 和 "a")未被函式 string:to_lower/1string:to_upper/1 正確轉換。(感謝 Richard O'Keefe。)

    內部 ID:OTP-7589

  • 如果節點已連接,則函式 pool:attach/1 現在會回傳 already_attached,而不是 allready_attached(原文如此!)。(感謝 Edwin Fine。)

    * 潛在的不相容性 *

    內部 ID:OTP-7603

  • io:get_line/1,2 的文件現在提及回傳值也可以是 {error,Reason}

    內部 ID:OTP-7604 輔助 ID:seq11063

改進和新功能

  • 現在已將分割函式新增至 re 程式庫。來自 run、replace 和 split 的例外和錯誤都變得更加一致。

    內部 ID:OTP-7514 輔助 ID:OTP-7494

  • 使用 proc_lib 產生的進程(包括 gen_server 和其他使用 proc_lib 的程式庫模組)不再保留初始呼叫的整個引數列表,而僅保留引數個數。

    此外,如果使用 proc_lib:spawn/1 產生一個 fun,則不會保留實際的 fun,而僅保留實作該 fun 的函式的模組、函式名稱和引數個數。

    變更的原因是保留初始的 fun(或引數列表中的 fun)會阻止升級模組的程式碼。第二個原因是保留 fun 和函式引數可能會浪費大量記憶體。

    變更的缺點是崩潰報告將提供關於初始呼叫的較不精確的資訊(僅 Module:Function/Arity,而不是 Module:Function(Arguments))。函式 proc_lib:initial_call/1 仍會回傳列表,但每個引數都已替換為虛擬原子。

    內部 ID:OTP-7531 輔助 ID:seq11036

  • 現在實驗性支援從封存檔載入程式碼。請參閱 codeiniterl_prim_loaderescript 的文件以取得更多資訊。

    已改進 escript 的錯誤處理。

    escript 現在可以為模擬器設定明確的引數,例如 -smp enabled

    escript 現在可以包含預先編譯的 beam 檔。

    escript 現在可以包含一個封存檔,其中包含一個或多個應用程式(實驗性)。

    已移除內部模組 code_aux

    內部 ID:OTP-7548 輔助 ID:otp-6622

  • 啟用明確控制在 ZIP 封存檔中應該壓縮的檔案類型。

    內部 ID:OTP-7549 輔助 ID:otp-6622

  • 在工作控制模式中,"s" 和 "r" 命令現在接受一個可選引數來指定要啟動哪個 shell。(感謝 Robert Virding。)

    內部 ID:OTP-7617

STDLIB 1.15.4

已修正的錯誤和故障

  • 日曆模組中的一個錯誤可能導致 calendar:local_time_to_universal_time_dst/1 對於沒有 DST 的時區中的本地時間回傳重複的相同值。僅當本地時間在因從 DST 轉換為非 DST 而發生兩次的時段內時,才應該回傳多個值,並且當然僅在具有 DST 的時區中。現在已實作正確的行為。

    內部 ID:OTP-7344 輔助 ID:seq10960

  • 已更正 (d)ets:init_table() 的文件。(感謝 Paul Mineiro。)

    內部 ID:OTP-7413

  • 在 R12B-0 中為函式 io:fwrite/2,3io_lib:fwrite/2 的控制序列 pP 引入的行上非空白字元數量的軟上限 60 已被移除。這表示其列印表示適合在一行的術語將沒有換行符號。不過,Erlang shell 仍會使用 60 個字元的限制。

    內部 ID:OTP-7421 輔助 ID:OTP-6708

  • 已從 Dets 中移除一些偵錯程式碼。

    內部 ID:OTP-7424

  • 已更正 dets:match_delete/2 的文件。(感謝 Paul Mineiro。)

    內部 ID:OTP-7445

  • 更正了 digraph(3)。(感謝 Vlad Dumitrescu。)

    內部 ID:OTP-7492

  • 對於 escript 執行所在的進程,trap_exit 進程旗標現在為 false,而不是 true(如在先前的版本中)。依賴先前(違反直覺)行為的指令碼可能無法運作。(感謝 Bengt Kleberg。)

    * 潛在的不相容性 *

    內部 ID:OTP-7517

改進和新功能

  • lists:(u)sort/2 的文件現在說明了排序函式的預期行為。

    內部 ID:OTP-7489

  • re 模組已擴充,具有重複比對(全域選項)和替換函式。

    內部 ID:OTP-7494 輔助 ID:OTP-7181

  • Erlang shell 現在在評估未定義的命令時會顯示更友好的錯誤訊息。(感謝 Richard Carlsson。)

    內部 ID:OTP-7495

STDLIB 1.15.3

已修正的錯誤和故障

  • 使用空目錄將 zip:unzip 解壓縮到/從二進位檔無法運作。(感謝 Martin Dvorak。)

    內部 ID:OTP-7248

  • 現在 io_lib 模組的控制序列 w 的文件說明了浮點數會精確列印。

    內部 ID:OTP-7324 輔助 ID:OTP-7084

  • zip:unzip 不支援 jar 檔案中發現的 zip 格式。

    內部 ID:OTP-7382 輔助 ID:seq10970

改進和新功能

  • 已將實驗性模組 "re" 新增至模擬器,該模組為 Perl 類型的正規表示式(PCRE)介接公開可用的正規表示式程式庫。介面純粹是實驗性的,並且將會受到變更的影響。

    實作方式是為了在相關的 EEP 中進行參考和測試。

    內部 ID:OTP-7181

STDLIB 1.15.2

已修正的錯誤和故障

  • 當插入許多小型物件時,Dets 有時會在達到最大插槽數時當機。(感謝 Daniel Goertzen。)

    內部 ID:OTP-7146

  • 當評估器進程被終止時,連結到 Erlang shell 的進程沒有收到結束訊號。此錯誤是在 R12B-0 中引入的,現已修正。

    內部 ID:OTP-7184 輔助 ID:OTP-6554

  • ets:update_counter/3 的無效引數處理不正確。元組位置 (Pos) 小於 1 會導致更新鍵後面的元素(就像沒有指定任何位置一樣)。現在,所有 Pos 的無效值都會導致 badarg 錯誤。

    自身 ID:OTP-7226

  • 對於某些終端機,io:columns/0 可能會回傳 0 而不是 enotsup。現在已修正此問題。

    自身 ID:OTP-7229 輔助 ID:seq10886

  • qlc:info() 現在可以處理埠識別符號、PID、參考和函數。(感謝 Wojciech Kaczmare 回報此錯誤。)

    在評估傳送給呼叫 qlc:cursor() 的程序的 parent_fun 訊息時,有時會錯誤地被消耗。此錯誤已修正。

    自身 ID:OTP-7232

  • erl_parse:abstract() 現在可以處理位元字串。

    自身 ID:OTP-7234

改進和新功能

  • 已重寫 queue 模組,使其更易於使用。2007 年 12 月在 erlang-questions@erlang.org 上,來自 Lev Walkin、Anders Ramsell 和 Rober Virding 等人的建議和討論。也曾討論過更改內部表示方式以包含長度資訊,這將加速 len/1,但該變更已延後。任何有興趣的人都可以撰寫 EEP,並嘗試為佇列開銷達成可接受的妥協方案,從而提高除 len/1 之外所有其他操作的速度。queue 模組現在針對快速且最少垃圾的 in/2out/1 等進行了最佳化。請參閱文件。

    新函式:is_queue/1get/1get_r/1peek/1peek_r/1drop/1drop_r/1liat/1is_queue/1 是一個新的謂詞,liat/1 是一個舊拼寫錯誤的修正,而其他(get*、peek* 和 drop*)是新的介面函式。

    自身 ID:OTP-7064

  • 在寫入浮點數方面,io_lib:write/1,2io_lib:print/1,4 函式已變更。此變更會影響 io_lib 模組的控制序列 pPwW。(感謝 Bob Ippolito 的程式碼貢獻。)

    自身 ID:OTP-7084

  • 已更新 erlang:function_exported/3io:format/2 函式的文件,不再聲明這些函式主要為了向後相容性而保留。

    自身 ID:OTP-7186

  • 新的 BIF ets:update_element/3。在 ets 元組中更新個別元素,而無需讀取、更新和寫回整個元組。

    自身 ID:OTP-7200

  • string:join/2 現在接受空清單作為第一個引數。

    自身 ID:OTP-7231 輔助 ID:OTP-6671

  • qlc:info/1,2 接受一個新的選項 depthqlc:table/2 說明中使用的 SelectedObjects 類型已擴充。

    自身 ID:OTP-7238

  • 在文件中,已將 tuple_size/1byte_size/1 取代為 size/1

    自身 ID:OTP-7244

STDLIB 1.15.1

修正的錯誤和故障

  • Ets:select/3 與 ets:repair_continuation/2 和 ordered_set 資料表結合使用時,即使按預期使用,也可能會導致 function_clause。現在已修正此問題。感謝 Paul Mineiro 找出並隔離了此錯誤!

    自身 ID:OTP-7025

  • 現在,已棄用的函式 ftp:close/1 的編譯器警告會提及正確的替代函式。

    已將 httpd_util 模組中已移除函式的警告變更為說明它們已被移除,而不僅僅是已棄用。(感謝 Fredrik Thulin。)

    自身 ID:OTP-7034 輔助 ID:seq10825

  • (Expr)#r{}(未更新任何欄位)中,Expr 不再評估多次。還有一個測試來驗證 Expr 是否為正確的記錄類型。(感謝 Dominic Williams。)

    自身 ID:OTP-7078 輔助 ID:OTP-4962

  • 文件錯誤修正和澄清。

    (感謝 Joern (opendev@gmail.com)、Matthias Lang 和 Richard Carlsson。)

    自身 ID:OTP-7079

  • 使用比對規範遍歷 QLC 資料表時,有時不會從答案清單中刪除重複的物件。(感謝 Dmitri Girenko。)

    自身 ID:OTP-7114

改進和新功能

  • 已更新文件,以反映 Erlang Shell 的最新更新,以及 io_lib 模組的控制序列 p 的微小修改。

    已從程式碼範例和 Erlang Shell 範例中移除多餘的空白行。

    自身 ID:OTP-6944 輔助 ID:OTP-6554、OTP-6911

  • 已將 tuple_size/1byte_size/1 取代為 size/1

    自身 ID:OTP-7009

  • 現在可以休眠 gen_server/gen_event/gen_fsm。在 gen_server 和 gen_fsm 中,休眠是由回傳原子 'hibernate' 而不是逾時值觸發。在 gen_event 的情況下,休眠是由事件處理常式回傳一個額外元素包含原子 'hibernate' 的元組觸發。

    自身 ID:OTP-7026 輔助 ID:seq10817

  • 已將一些未記載的偵錯功能新增至 Dets。

    自身 ID:OTP-7066

  • 函式 digraph_utils:is_tree/1digraph_utils:is_arborescence/1digraph_utils:arborescence_root/1 是新的。

    自身 ID:OTP-7081

  • 如果記錄更新程式碼由多行原始碼組成,編譯器可能會為記錄更新產生次佳程式碼。

    自身 ID:OTP-7101

STDLIB 1.15

修正的錯誤和故障

  • 已修正 qlc 中的錯誤。

    • qlc:table/2lookup_fun 選項設定為 undefined 可能會導致當機。
    • 如果 QLC 以允許使用比對規範進行遍歷的方式限制資料表的某些欄位,且 QLC 還將資料表的鍵欄位或某些索引欄位與某些其他資料表的欄位進行比較,則 qlc 始終選擇先遍歷該資料表,而從不考慮查詢聯結。現在已變更為始終優先選擇查詢聯結;如果希望使用比對規範進行初始遍歷,則需要透過引入一個額外的 QLC 並使用限制該欄位的篩選器來重寫查詢。
    • 當嘗試尋找比對規範和查詢的候選項時,除非篩選器緊接在產生器之後且可能緊接在使用來自同一產生器的變數的其他篩選器之後,否則使用僅來自一個產生器的變數的篩選器會被忽略。特別是,聯結兩個資料表的篩選器不應放在產生器和僅使用該產生器的篩選器之間。
    • 用於實作 QLC 資料表的呼叫函式 TraverseFun 從 STDLIB 1.14 (OTP-5195) 開始,允許回傳列表以外的項。但是,當回傳的項是 fun 時,qlc 通常會嘗試呼叫該 fun 而不是回傳它。

    也實作了一些次要的最佳化。

    自身 ID:OTP-6673

  • 已修正從 Shell 使用參數化模組的錯誤。

    自身 ID:OTP-6785

  • 已修正 erl_eval 模組中位元語法的 size 表達式錯誤。

    自身 ID:OTP-6787

  • log_mf_h 事件處理常式在完成讀取索引檔案後,未關閉索引檔案,導致檔案描述子洩漏。

    自身 ID:OTP-6800

  • 已將 filename()dirname() 類型的定義新增至 filelib 模組的文件中。

    自身 ID:OTP-6870

  • 對於夠奇怪的檔案系統問題,例如寫入已滿的檔案系統,file:write_file/3、file:write/2 和 file:read/2 可能會當機(與文件相反)。此錯誤現已修正。

    在此過程中,已重寫檔案模組以產生更好的錯誤代碼。現在,Posix 錯誤代碼源自 OS 檔案系統呼叫,或僅針對非常相似的原因產生(例如,如果記憶體配置失敗,則會產生 'enomem';如果 Erlang 中的檔案控制代碼是檔案控制代碼但目前無效,則會產生 'einval')。

    現在會產生更多類似 Erlang 的錯誤代碼。例如,如果引數不是檔案控制代碼類型,則 file:close/1 現在會回傳 {error,badarg}。請參閱 file(3)。

    已移除使用 file:write/2 寫入單個位元組而不是一個位元組的列表或二進位檔案的可能性,這與文件相反。

    * 潛在的不相容性 *

    自身 ID:OTP-6967 輔助 ID:OTP-6597 OTP-6291

  • 已修正 erl_eval 中有關評估 ++/2 運算子的錯誤。(感謝 Matthew Dempsky。)

    自身 ID:OTP-6977

改進和新功能

  • 在極少數情況下,當呼叫者連結到被呼叫的伺服器,且伺服器在呼叫期間當機時,gen:call/3,4 內部函式的行為已略微變更;其結束訊號被 gen:call/3,4 程式碼消耗並轉換為結束例外。此結束訊號不再被消耗。

    若要注意到此變更,1) 呼叫程序必須連結到被呼叫的伺服器。

    1. 呼叫不得按名稱進行遠端,即必須按 PID 進行本機或遠端、按名稱進行本機或按名稱進行全域。

    2. 呼叫程序必須設定 process_flag(trap_exit, true)

    3. 伺服器必須在呼叫期間當機。

    4. 呼叫程序必須對在其訊息佇列中接收先前已消耗的 {'EXIT',Pid,Reason} 訊息敏感。

    舊的行為曾經是客戶端注意到伺服器是否死機的唯一方法,但自引入 erlang:monitor(process, {Name,Node}) 並在 gen:call 中使用以來,如果不是錯誤,則被視為不必要的行為。

    受影響的使用者 API 包括:gen_server:call/2,3gen_fsm:sync_send_event/2,3gen_fsm:sync_send_all_state_event/2,3gen_event:_sys:_,以及一些可能不太會被注意到的其他 API。

    * 潛在的不相容性 *

    自身 ID:OTP-3954 輔助 ID:Seq 4538

  • 發生例外時,Erlang Shell 現在會以更清晰的方式顯示類別、原因和堆疊追蹤(而不是像以前一樣傾印原始的 EXIT 元組)。proc_lib:format/1 會以相同更清晰的方式顯示當機報告的例外。

    新的 shell 命令 catch_exception 和新的應用程式組態參數 shell_catch_exception 可用於捕獲通常會導致 Erlang shell 退出的異常。

    Own Id: OTP-6554 Aux Id: OTP-6289

  • 函數 string:join/2 將列表中的字串以分隔符號連接起來。範例:'string:join(["a", "b", "c"], ", ") 會產生 "a, b, c"'

    Own Id: OTP-6671

  • 函數 io:fwrite/2,3io_lib:fwrite/2Format 參數中的控制序列 P,現在在列印元組和列表時會插入較少的分行符號。已引入每行非空白字元數量的軟上限 60。

    Own Id: OTP-6708

  • 新的模組 array 提供了一個快速的函數式陣列實作。

    Own Id: OTP-6733

  • 下列模組中,長期以來已棄用的函數現在已被移除:dicterl_evalerl_ppioio_liblistsorddictordsetssetsstring

    未公開的函數 lists:zf/3 也已被移除 (請改用列表推導式或 lists:zf/2)。

    * 潛在的不相容性 *

    Own Id: OTP-6845

  • 針對 file:pread/2 和 file:pread/3 的文件進行了小幅修正。

    Own Id: OTP-6853

  • Kernel 和 STDLIB 模組的合約指令。

    Own Id: OTP-6895

  • 已棄用多個版本的 ets:fixtable/2 函數已被移除。

    ets:info/1 函數已重新實作為 BIF,這保證了返回的資訊是一致的。

    如果第二個參數無效,ets:info/2 函數現在會以 badarg 的原因失敗。(可以使用 Dialyzer 來找出第二個參數拼寫錯誤的錯誤程式碼。)

    * 潛在的不相容性 *

    Own Id: OTP-6906

  • Erlang 的美化列印器 erl_pp 現在會插入更多的換行符號,以便 Cover 進行行覆蓋率分析。(感謝 Thomas Arts。)

    Own Id: OTP-6911

  • 關於在表格遍歷期間插入物件時會發生的情況,現在 ets:safe_fixtable/2、ets:foldl/3 和 ets:foldr/3 的文件說明更加清晰。

    Own Id: OTP-6928 Aux Id: seq10779

  • 現在可以直接將 tar 檔案中的檔案解壓縮到二進位檔案中。也可以直接從二進位檔案將檔案新增到 tar 檔案中。

    Own Id: OTP-6943

  • 函數 keystore/4keytake/3lists 模組中的新函數。

    Own Id: OTP-6953

  • 新的 qlc 選項 tmpdir_usage 可用於在即將建立暫存檔時,將訊息輸出到錯誤記錄器,或完全禁止使用暫存檔。

    Own Id: OTP-6964

STDLIB 1.14.5.3

改進和新功能

  • 更新了 -type() 和 -spec() 的允許語法。

    Own Id: OTP-6861 Aux Id: OTP-6834

STDLIB 1.14.5.2

改進和新功能

  • 編譯器為了向前相容性,將會忽略 R12B 版本中引入的 -type() 和 -spec() 屬性。

    Own Id: OTP-6834

STDLIB 1.14.5.1

已修復的錯誤和故障

  • log_mf_h 事件處理常式在完成讀取索引檔案後,未關閉索引檔案,導致檔案描述子洩漏。

    自身 ID:OTP-6800

改進和新功能

  • dict:size/1 和 orddict:size/1 函數已記錄在文件中。

    Own Id: OTP-6818

STDLIB 1.14.5

已修復的錯誤和故障

  • 已修復 Dets 中關於比較 (==) 和比對 (=:=) 的錯誤。

    STDLIB 手冊頁面已更新,以更仔細地說明何時比對和何時比較 term。

    Own Id: OTP-4738 Aux Id: OTP-4685

  • 已更新 shell 以修復以下缺陷:如果未使用 oldshell,shell 處理程序退出會讓您留下無回應的初始 shell。使用不存在的回呼模組啟動受限的 shell 會導致 shell 無法使用任何命令,即使是 init:stop/0 也不行。當 restricted_shell 處於活動狀態時,Fun 不能用作本機 shell 函數(在 shell_default 或 user_default 中)的參數。

    Own Id: OTP-6537

  • 已修復 QLC 的解析轉換中的錯誤。

    Own Id: OTP-6590

  • 已修復關於 lists:sort/1lists:keysort/2 以及浮點數和整數混合的錯誤。

    Own Id: OTP-6606

  • 在 Erlang shell 中呼叫 erlang:garbage_collect/0 時,不僅會垃圾回收評估器處理程序(在 Erlang shell 中呼叫 self/0 所傳回的處理程序),還會垃圾回收保存歷史記錄清單的處理程序。

    Own Id: OTP-6659

  • beam_lib 模組中過去會捕獲異常並返回元組 {'EXIT',Reason} 的函數,現在會以原因 Reason 退出。

    Own Id: OTP-6711

  • 現在,每當評估運算符時(例外情況是 andalsoorelsecatch),erl_eval 模組都會呼叫非本機函數處理程序。現在,當函數或運算符出現在保護測試中時,也會呼叫非本機函數處理程序(過去會忽略這些呼叫)。

    這些變更會影響在受限模式下執行的 Erlang shell:現在會為諸如 '!'/2 之類的運算符呼叫回呼函數 non_local_allowed/3。這表示可能需要變更 non_local_allowed/3,以允許運算符通過。請注意,為了停止 shell 中的訊息傳遞,必須限制 erlang:'!'/2 以及 erlang:send/2,3

    * 潛在的不相容性 *

    Own Id: OTP-6714 Aux Id: seq10374

改進和新功能

  • 新的編譯器選項 warn_obsolete_guard 可用於針對呼叫舊的類型測試 BIF 開啟警告。

    Own Id: OTP-6585

  • 對於使用 escript 編寫的腳本,有一個新函數 escript:script_name/0,可用於檢索腳本的路徑名稱。關於預定義巨集(例如 ?MODULE 和模組名稱)的文件已進行說明。

    Own Id: OTP-6593

  • Makefile 的小幅變更。

    Own Id: OTP-6689 Aux Id: OTP-6742

STDLIB 1.14.4

已修復的錯誤和故障

  • code:module_md5/1beam_lib:md5/1 和編譯器針對 vsn 屬性的預設值所完成的 BEAM 檔案 MD5 計算已全部變更,因此其結果在所有平台上都相同;包含 fun 的模組在不同平台上可能會得到不同的 MD5。

    Own Id: OTP-6459

  • 當使用 file_sorter 模組排序 term 時(Format 選項設定為 term),並非總是會正確處理檔案錯誤。此錯誤已修正。

    除非實際使用,否則不再檢查 tmpdir 選項提供的目錄。不再傳回錯誤原因 not_a_directory;而是傳回 file_error 元組。

    Own Id: OTP-6526

  • 已修復 erl_eval 模組中關於 try/catch 的錯誤。

    Own Id: OTP-6539

  • 在排序 join 運算的運算元時,QLC 使用錯誤的引數呼叫 file:open/3。此錯誤已修正。

    Own Id: OTP-6562 Aux Id: seq10606

改進和新功能

  • 已更新函數 beam_lib:cmp/1beam_lib:strip/1(以及類似的函數),以更通用的方式處理可選區塊(例如 "FunT"),以便未來相容。

    已新增函數 beam_lib:chunks/3

    已新增函數 beam_lib:md5/1

    Own Id: OTP-6443

  • 將 base64 作為模組新增至 stdlib,用於編碼和解碼

    Own Id: OTP-6470

  • 將函數 to_upper/1 和 to_lower/1 新增至 string 模組。這些函數提供 ISO/IEC 8859-1 字元 (Latin1) 和字串的大小寫轉換。

    Own Id: OTP-6472

  • 現在,受限 shell 使用的回呼函數 non_local_allowed/3 可以傳回值 {{restricted,NewFuncSpec,NewArgList},NewState},可用於讓 shell 呼叫指定的其他函數。

    Own Id: OTP-6497 Aux Id: seq10555

  • 有一個新的 escript 程式,可用於以 Erlang 編寫腳本。Erlang 腳本不需要編譯,並且可以將任何引數傳遞給它們,而不會有被 Erlang 系統解譯的風險。

    Own Id: OTP-6505

  • 現在允許函數 io:fwrite/2,3io_lib:fwrite/2Format 參數為二進制。

    專屬 ID:OTP-6517

STDLIB 1.14.3.1

修正錯誤與故障

  • 函數 io:fwrite/2,3io_lib:fwrite/2Format 參數中的控制序列 pP,在應用於二進制時可能會導致 badarg 失敗。此錯誤是在 STDLIB 1.14.3 中引入的。(感謝 Denis Bilenko。)

    專屬 ID:OTP-6495

改進和新功能

  • 新增選項 {cwd, Dir},以便使用相對路徑名稱建立 zip 封存檔,而無需執行(全域)file:set_cwd。

    專屬 ID:OTP-6491 輔助 ID:seq10551

STDLIB 1.14.3

修正錯誤與故障

  • 在 Kernel 2.11.2 中引入的 spawn_opt/2,3,4,5 選項 monitor,目前在使用 proc_lib 啟動程序時無法使用,也就是說,在啟動 gen_server、gen_fsm 等時也無法使用。

    此限制現已正確記錄,並且當提供此選項時,gen_fsmgen_serverproc_libstartstart_link 函數的行為已從無限期掛起變更為以 badarg 原因失敗。

    (感謝 Fredrik Linder)

    專屬 ID:OTP-6345

改進和新功能

  • 當達到最大深度時,函數 io:fwrite/2,3io_lib:fwrite/2Format 參數中的控制序列 P 現在會將二進制字串的尾部替換為 ...。例如,io:fwrite("~P", [<<"a binary string">>, 3]). 會印出 <<"a binary"...>>

    縮排會更加小心,盡可能不超過右邊界。

    如果在列印 tuple 時達到最大深度,則會印出 ,... 而不是 |...(此變更也適用於控制序列 W)。

    專屬 ID:OTP-6354

  • Erlang shell 命令 h/0 會印出歷史記錄清單,現在會避免印出 v/1 所參照的(巨大)term,而是只印出對 v/1 的呼叫。

    專屬 ID:OTP-6390

STDLIB 1.14.2.2

修正錯誤與故障

  • 函數 dets:select/1,3dets:match/1,3dets:match_object/1,3 已變更為永不傳回 {[],Continuation}。此變更會影響 Mnesia 中對應的函數。

    QLC 中已修正錯誤:如果 tmpdir 選項未指定有效的目錄,則 qlc:info() 可能會崩潰;查找索引鍵的結果會保留在 RAM 中,這應該能提升效能。

    專屬 ID:OTP-6359

STDLIB 1.14.2.1

修正錯誤與故障

  • 已修正 erl_pp:exprs() 中的錯誤。

    專屬 ID:OTP-6321 輔助 ID:seq10497

STDLIB 1.14.2

修正錯誤與故障

  • 函數 io:format/2,3io_lib:format/2Format 參數中的控制序列 pP 並未很好地處理二進制。此錯誤是在 stdlib-1.14 中引入的,現已修正。

    專屬 ID:OTP-6230

  • filelib:wildcard(Wc, PathWithRedundantSlashes),其中 PathWithRedundantSlashes 是包含多餘斜線的目錄路徑,例如 /tmp///tmp,可能會傳回不正確的結果。(感謝 Martin Bjorklund。)

    專屬 ID:OTP-6271

  • 如果在模組宣告之前使用預先定義的巨集 ?MODULE 或 ?MODULE_STRING,Erlang 程式碼預處理器會崩潰。此錯誤已修正。

    專屬 ID:OTP-6277

改進和新功能

  • 已在 qlc 模組中新增對更快聯結兩個表格的支援。有兩種快速聯結:使用現有索引的查找聯結,以及取用兩個已排序輸入的合併聯結。有一個新的 join 選項可用來強制 QLC 在某些 QLC 運算式中使用特定類型的聯結。

    還納入了其他幾個變更

    • cursor/2eval/2fold/4info/2 的新 tmpdir 選項可用來設定聯結用於暫存檔的目錄。此選項也會覆寫 keysort/3sort/2tmpdir 選項。

    • 新的 lookup 選項可用來斷言在評估某些 QLC 運算式時會查找常數。

    • cachecache_all 選項接受新的標籤:etslistno。如果答案無法保留在 RAM 中,則標籤 list 會使用暫存檔在清單中快取答案。結合 {cache,list}{unique, true} 等同於呼叫選項 unique 設定為 truesort/2。為了回溯相容性,會識別舊標籤 true(等同於 ets)和 false(等同於 no)。

    • 新的選項 max_list_size 可用於設定合併聯結開始使用暫存檔來處理大型等價類別,以及清單中快取的答案放置在暫存檔上的限制。

    • 有一個新的回呼 is_sorted_key 作為選項提供給 table/2

    • QLC 會在嘗試尋找查找函數的常數時,分析每個 QLC 運算式。之前只分析具有一個產生器的 QLC 運算式。

      請注意,只會分析產生器之後立即放置防護語法的篩選器。對防護篩選器的限制是不相容的變更。請參閱 qlc 以取得更多詳細資料。

    • 同樣地,可以使用多個用於遍歷 QLC 表格的符合規格,用於單一 QLC 運算式的不同產生器。

    • 已修正錯誤:在快取足夠複雜的查詢的答案時,可能會發生某些答案未傳回的情況。

    * 潛在的不相容性 *

    專屬 ID:OTP-6038

  • 當程式碼深度巢狀時,Erlang 格式化列印器 (erl_pp) 現在快得多。也修正了一些小錯誤。

    專屬 ID:OTP-6227 輔助 ID:OTP-5924

  • Erlang shell 現在會嘗試垃圾回收大型二進制。在某些情況下,否則這些二進制可能會無限期地持續存在。

    專屬 ID:OTP-6239

  • 為了協助 Dialyzer 尋找更多錯誤,Kernel 和 STDLIB 應用程式中的許多函數現在只接受文件中記載的類型之引數。

    例如,lists:prefix/2lists:suffix/2 函數記載為只接受清單作為其引數,但實際上它們接受任何內容並傳回 false。現在已變更,如果一個或兩個引數不是清單,則這些函數會導致例外狀況。

    此外,string:strip/3 函數記載為採用字元引數,該引數是要從字串的一端或兩端移除的字元。如果給定的是清單而不是字元,則它過去不會執行任何動作,但現在會導致例外狀況。

    Dialyzer 會找到這些函數傳遞錯誤類型引數的大多數情況。

    * 潛在的不相容性 *

    專屬 ID:OTP-6295

STDLIB 1.14.1

修正錯誤與故障

  • 呼叫 yecc:file/1,2 的函數 c:y/1,2 現在會由 c:help/0 列出。

    已在 c 中新增 c:y/1,2 的文件。

    控制序列字元 s 可識別二進制和深度字元清單的事實已在 io 中記載。此功能是在 R11B-0 (OTP-5403) 中新增的。

    專屬 ID:OTP-6140

  • shell 命令 rr() 有時無法從檔案讀取記錄定義。此問題已修正。

    專屬 ID:OTP-6166 輔助 ID:OTP-5878

  • erl_eval 中的非本機函數處理常式,用於實作 Erlang shell 的受限模式,無法正確處理對 erlang:apply/3 的呼叫。此錯誤已修正。

    專屬 ID:OTP-6169 輔助 ID:seq10374

  • 當表格不是具名表格時,ets:rename/1 可能會死鎖或當機 SMP 模擬器。

    ets:next/2 和 ets:prev/2 可能會在 SMP 模擬器上傳回錯誤的結果。

    專屬 ID:OTP-6198 輔助 ID:seq10392, seq10415

  • 在關閉 Dets 表格時,有時會以無法在不修復檔案的情況下開啟表格的方式儲存空間管理資料。此錯誤已修正。

    專屬 ID:OTP-6206

STDLIB 1.14

修正錯誤與故障

  • QLC 中的錯誤修正:現在允許用於實作 QLC 表格的兩個回呼函數 TraverseFunLookupFun 傳回清單以外的 term。此 term 會立即作為目前查詢的結果傳回,主要用於傳回錯誤 tuple。

    也修正了其他幾個小錯誤。

    專屬 ID:OTP-5195

  • STDLIB 模組 error_logger_file_herror_logger_tty_h 現在會從 SASL 應用程式讀取環境變數 utc_log

    專屬 ID:OTP-5535

  • ets:info/1 已修正為符合文件描述的行為,並回傳元組列表,而非包含元組的元組。

    * 潛在的不相容性 *

    自有 ID:OTP-5639

  • 從現在開始,在記錄宣告的預設值中引用尚未宣告的記錄,將被程式碼檢查器視為錯誤。若記錄宣告的預設值使用或綁定變數,也會被視為錯誤。

    * 潛在的不相容性 *

    自有 ID:OTP-5878

  • 當使用 -include_lib 引入 .hrl 檔案時,引入路徑會暫時更新,包含找到該 .hrl 檔案的目錄,這將允許該 .hrl 檔案本身使用 -include 從其所在目錄引入檔案。(感謝 Richard Carlsson。)

    自有 ID:OTP-5944

  • 修正 filelib:ensure_dir/1,該函式有時回傳 true,有時回傳 ok,現已修正為成功時一律回傳 ok。這與文件描述的 true 相反,但 ok 被認為是更合理的傳回值。

    * 潛在的不相容性 *

    自有 ID:OTP-5960 輔助 ID:seq10240

  • 現在,當在 {Module, Function}(ArgList) 形式的呼叫中使用記錄時,Shell 的處理效果更佳。

    自有 ID:OTP-5990 輔助 ID:OTP-5876

  • lists:ukeysort/2lists:ukeymerge/3 函式已變更,現在如果兩個元組的鍵值相同,則視為相等。

    為了保持一致性,lists:usort/2lists:umerge/3 也已修改:如果兩個元素比較結果相等,則視為相等。

    file_sorter 模組也以類似方式修改:unique 選項現在適用於鍵值(keysort()keymerge())和排序函式({order, Order} 選項)。

    * 潛在的不相容性 *

    自有 ID:OTP-6019

  • 修正 ets:update_counter/3 的文件;如果要更新的計數器是鍵值,也會出現 badarg 錯誤。

    自有 ID:OTP-6072

  • 當使用 file_sorter 模組和排序函式對項目進行排序時,排序並不總是穩定的。此錯誤已修正。

    自有 ID:OTP-6088

改進與新功能

  • 程式碼檢查器的改進

    • compile 屬性在函式定義後才會被識別。
    • 新的編譯器選項 nowarn_deprecated_function 可用於關閉對已棄用函式的呼叫警告。
    • 新的編譯器選項 {nowarn_unused_function,[{Name,Arity}]} 會關閉針對所提及函式未使用的本機函式警告。新的選項 {nowarn_deprecated_function,[{Module,Name,Arity}]}{nowarn_bif_clash,[{Name,Arity}]} 的運作方式類似。

    Erlang 程式碼預處理器 epp 現在可識別 file 屬性。此屬性旨在供 Yecc 等產生原始碼檔案的工具使用。

    自有 ID:OTP-5362

  • io:fwriteio_lib:fwrite 的格式化選項 ~s 已擴充為可處理二進位或 I/O 列表的引數。

    自有 ID:OTP-5403

  • io:format/2,3io_lib:format/2 函式的 Format 引數的控制序列 pP 已變更為顯示包含可列印字元的二進位內容,如同字串。

    自有 ID:OTP-5485

  • 程式碼檢查器會針對在 export 屬性中匯出多次的函式發出警告。

    自有 ID:OTP-5494

  • 新增了 STDLIB 手冊 stdlib(6)。其中提及了 Erlang shell 的組態參數。

    自有 ID:OTP-5530

  • 新增 zip 模組,其中包含用於讀取和建立 zip 壓縮檔的函式。請參閱 zip

    自有 ID:OTP-5786

  • 簡易的一對一監管者現在使用 dict 而非列表來儲存子程序的 PID。這顯著提高了存在許多動態監管子程序時的效能。(感謝 Mickaël Rémond 等人。)

    自有 ID:OTP-5898

  • 當指定新的選項 'strict_record_tests' 時,編譯器會產生程式碼,在保護式中驗證 'R#record.field' 操作的記錄類型。自 R10B 以來,已經產生驗證主體中記錄類型的程式碼,但在這個版本中,如果記錄驗證測試失敗,將會出現 '{badrecord,RecordTag}',而不是 'badmatch'。請參閱 compile 模組的文件以取得更多資訊。

    Erlang shell 一律會套用嚴格的記錄測試。

    自有 ID:OTP-5915 輔助 ID:OTP-5714

  • Erlang 美化列印器(erl_pp)現在會嘗試在適當的位置插入換行符號。

    自有 ID:OTP-5924

  • digraph:new/1 已移除 public 選項。原因是 digraph 模組中的多個函式是使用多次 ETS 存取來實作,這並非執行緒安全。(感謝 Ulf Wiger。)

    * 潛在的不相容性 *

    自有 ID:OTP-5985

  • lists:keyreplace/4 函式會檢查第四個引數 (NewTuple) 是否為元組。

    自有 ID:OTP-6023

  • beam_lib 中新增了從除錯資訊(抽象程式碼)重建原始碼的範例。(感謝撰寫此範例的 Mats Cronqvist。)

    自有 ID:OTP-6073

  • 新的編譯器選項 warn_unused_record 用於尋找未使用的本機定義記錄類型。

    自有 ID:OTP-6105

STDLIB 1.13.12

修正的錯誤和故障

  • 已新增 shell_default:xm/1。它會呼叫 xref:m/1

    自有 ID:OTP-5405 輔助 ID:OTP-4101

  • 每當從記錄宣告的某個預設值引用尚未宣告的記錄時,就會輸出警告。在 STDLIB 1.14 (R11B) 中,此類向前參考將會導致編譯錯誤。

    自有 ID:OTP-5878

  • 程式碼檢查器對 deprecated 屬性的檢查,並未考慮到編譯選項 export_all。此錯誤已修正。

    自有 ID:OTP-5917

  • Erlang 美化列印器未正確處理 try/catch。此錯誤已修正。

    自有 ID:OTP-5926

  • 修正 lists:nthtail/3 的文件。

    新增 lists:keymap/3 的文件。

    嘗試在 lists 中釐清其他一些類型宣告和函式描述。

    修正 timer:now_diff/2 的文件。

    修正 gen_fsmgen_serverio_liblib(3) 中的損壞連結。

    自有 ID:OTP-5931

  • 已將類型檢查新增至 lists.erl 中的函式。

    自有 ID:OTP-5939

改進與新功能

  • 新的 STDLIB 模組 erl_expand_records 會在抽象程式碼中展開記錄。Erlang shell 會使用它,這表示 shell 不再使用編譯器。

    自有 ID:OTP-5876 輔助 ID:OTP-5435

  • 編譯器現在會警告 megaco:format_versions/1 函式已棄用。

    自有 ID:OTP-5976

STDLIB 1.13.11

修正的錯誤和故障

  • 當使用已註冊的伺服器名稱呼叫 gen_server:enter_loop 時,只會檢查已註冊的名稱是否存在,而不會檢查它是否實際上是呼叫程序的名稱。

    自有 ID:OTP-5854

改進與新功能

  • 文件中關於 beam_lib:version/1 的更多詳細資訊。

    自有 ID:OTP-5789

  • 新的函式 io:read/3 的運作方式與 io:read/1,2 相同,但會採用第三個引數 StartLine

    自有 ID:OTP-5813

  • 已新增新的函式 gen_fsm:enter_loop/4,5,6,類似於 gen_server:enter_loop/3,4,5

    自有 ID:OTP-5846 輔助 ID:seq10163

  • 函式 c:i/1 現在已匯出。

    自有 ID:OTP-5848 輔助 ID:seq10164

STDLIB 1.13.10

修正的錯誤和故障

  • sofs 中已修正一些類型錯誤。

    自有 ID:OTP-5739

  • 預處理器過去會抱怨巨集定義 '-define(S(S), ??S).' 是循環的,但實際上並非如此。(感謝 Richard Carlsson。)

    自有 ID:OTP-5777

STDLIB 1.13.9

修正的錯誤和故障

  • 程式碼檢查器、QLC 和 erl_pp 模組並未在所有情況下處理新的 'fun M:F/A' 建構。此問題已修正。

    自有 ID:OTP-5644

改進與新功能

  • 大部分 Kernel 和部分 STDLIB 模組的手冊頁面都已更新,特別是在類型定義方面。

    已修正 erts:info/1 傳回值的文件。

    現在,erlang:statistics/1 的文件列出了所有可能的引數。

    自有 ID:OTP-5360

  • 已將一些元組函式取代為新的 fun M:F/A 建構。

    lists 模組中的高階函式不再接受任何情況下的錯誤函式。過去 'lists:map(bad_fun, [])' 會傳回 '[]',但現在會導致例外狀況。

    已移除 ets 模組中未使用、損壞的相容性程式碼。(感謝 Dialyzer。)

    已消除 Dialyzer 在 Appmon 應用程式中發現的 5 個不一致之處。

    自有 ID:OTP-5633

  • 如果系統中有超過 100 個程序,c:i/0 函式現在將以分頁模式執行。(感謝 Ulf Wiger。)

    erlang:system_info(process_count) 已被最佳化,現在會回傳與 length(processes()) 完全相同的值。先前 erlang:system_info(process_count) 不包含正在結束的行程,而這些行程包含在 length(processes()) 中。

    用於 erl+P 旗標,用於設定允許同時存在的最大行程數量,不再接受大於 134217727 的值。(您可能還是在達到該限制之前就耗盡記憶體。)

    自有 ID:OTP-5645 輔助 ID:seq9984

STDLIB 1.13.8

修正的錯誤與故障

  • beam_lib 及其文件中的極小修正。

    自有 ID:OTP-5589

改進與新功能

  • erlang:port_info/1 BIF 現在有文件說明。針對 erlang:port_info/2 的文件進行了小修正。

    math 模組的文件中新增註解,說明並非所有函數都適用於所有平台。

    在 ERTS 文件中的 erl 手冊頁面中新增了關於 '+c' 選項的更多資訊。

    自有 ID:OTP-5555

  • 新的 fun M:F/A 建構式會建立一個 fun,指向 M:F/A 的最新版本。此語法旨在取代有許多問題的元組 fun {M,F}

    新的類型測試 is_function(Fun,A) (可在 guards 中使用) 測試 Fun 是否為可使用 A 個引數套用的 fun。(目前,Fun 也可以是元組 fun。)

    自有 ID:OTP-5584

STDLIB 1.13.7

修正的錯誤與故障

  • filelib:wildcard/2 已損壞(它忽略了它的第二個引數)。

    此外,filelib:wildcard("Filename")(其中引數不包含任何元字元)將永遠回傳 ["Filename"]。已修正為如果 "Filename" 實際上不存在,則會回傳空列表。(filelib:wildcard/2 中也有相同的修正。)(此變更有些微的不相容性。)

    當給定不正確的模式(例如 "{a,")時,filelib:wildcard/1,2 將產生不同的例外。此例外過去是由 'exit(missing_delimiter)' 引起,但現在是 'erlang:error({badpattern,missing_delimiter})'。

    自有 ID:OTP-5523 輔助 ID:seq9824

改進與新功能

  • 進一步改進加密的除錯資訊:編譯器的新選項 encrypt_debug_info

    自有 ID:OTP-5541 輔助 ID:seq9837

STDLIB 1.13.6

修正的錯誤與故障

  • 當唯讀開啟 Dets 表格時,有時會嘗試重新雜湊表格,導致錯誤訊息。此問題已修正。

    自有 ID:OTP-5487 輔助 ID:OTP-4989

改進與新功能

  • 現在可以加密 Beam 檔案中的除錯資訊,以協助保持原始碼的機密性。請參閱 compile 的文件,了解如何提供加密金鑰;並參閱 beam_lib 的文件,了解如何提供解密金鑰,以便使用除錯器、Xref 或 Cover 等工具。

    beam_lib:chunks/2 函數現在接受額外的區塊類型 compile_info,以直接以 term 形式擷取編譯資訊。(感謝 Tobias Lindahl。)

    自有 ID:OTP-5460 輔助 ID:seq9787

STDLIB 1.13.5

修正的錯誤與故障

  • 如果無法寫入檔案,則關閉保存在 RAM 中的 Dets 表格會導致當機。此問題已透過回傳錯誤元組來修正。

    自有 ID:OTP-5402

  • erl_pp 現在可以正確地美化列印 fun F/A

    自有 ID:OTP-5412

  • 如果編譯器不在程式碼路徑中,Erlang shell 會失敗。此問題已修正,但為了評估記錄,仍然需要編譯器。

    自有 ID:OTP-5435

  • 修正了 ets:match/2 文件中的範例。同時澄清了 ets:update_counter/3 會以不可分割的方式更新計數器。(感謝 Anders Svensson。)

    自有 ID:OTP-5452 輔助 ID:seq9770、seq9789

改進與新功能

  • 為了在 STDLIB 1.13.1 中向後相容,重新引入了與系統其餘部分平行啟動 Erlang shell 的可能性。現在用於此的旗標稱為 async_shell_start,且已記錄下來。從 JCL 選單啟動的新 shell 不再與 init 同步。這使得即使初始 shell 尚未啟動,也可以啟動新的 shell(例如,用於除錯目的)。

    自有 ID:OTP-5406 輔助 ID:OTP-5218

  • 現在,當使用 snmp 模組中已棄用的函數時,編譯器會產生警告。

    自有 ID:OTP-5425

  • 函數 c:zi/0 已移除。請改用 c:i/0

    自有 ID:OTP-5432

  • 修正了 Dialyzer 發現的兩個小錯誤:從受限制的 shell 呼叫參數化的模組(也就是說,如果已使用 shell:start_restricted/1)會使 shell 評估器當機。gen_fsm 中的除錯列印有一條永遠不會符合的子句;導致列印的資訊減少。

    Dialyzer 也發現一個稍微更嚴重的問題:除非由 rpc:async_call/4 開始的呼叫已完成,否則 rpc:yield/1 會當機;rpc:nb_yield(Key,infinity) 也會當機。

    清除並移除了 Dialyzer 在 erlang:dmonitor_p/2 中找到的冗餘程式碼。

    自有 ID:OTP-5462

STDLIB 1.13.4

修正的錯誤與故障

  • 已修正 Erlang shell 中的錯誤。

    自有 ID:OTP-5327

  • 已移除 Dialyzer 回報的一些無用程式碼。

    已修正追蹤到包裝追蹤檔案時 dbg 中的錯誤。當開始新的包裝追蹤時,它無法刪除任何已存在的同名包裝追蹤檔案。

    自有 ID:OTP-5329

  • linter 可能會輸出關於記錄初始化中位元模式的無效警告。此問題已修正。

    自有 ID:OTP-5338

  • ordsets:is_set(NoList)(其中 NoList 是除列表以外的任何 term)會當機。為了與 sets:is_set/1gb_sets:is_set/1 保持一致,現在會回傳 false

    自有 ID:OTP-5341

  • 已新增 BIF erlang:raise/3。請參閱手冊了解詳細資訊。它僅適用於內部系統程式設計、進階錯誤處理。

    自有 ID:OTP-5376 輔助 ID:OTP-5257

改進與新功能

  • linter 現在會檢查 deprecated 屬性。請參閱 xref 以了解 deprecated 屬性的描述。

    自有 ID:OTP-5276

  • 如果使用者述詞回傳的值格式不正確,受限制的 shell 現在會指出。

    自有 ID:OTP-5335

STDLIB 1.13.3

修正的錯誤與故障

  • 已修正 linter 中關於未使用和被遮蔽變數的錯誤。

    自有 ID:OTP-5091

  • 已修正評估器中導致 shell 無法處理位元語法表達式的錯誤。

    自有 ID:OTP-5237

  • 對於格式字元 "g" 的某些精度和值組合,io:format/2 等不再當機。先前,如果精度 P 為 4 或更低,且要列印的浮點數的絕對值低於 10^4 但高於或等於 10^(P-1),則會當機。現在它不會根據浮點數的值而當機。

    自有 ID:OTP-5263

  • 已修正 Erlang shell 中關於處理位元語法的錯誤。

    自有 ID:OTP-5269

  • gb_sets:del_element/2 已變更為與 gb_sets:delete_any/2 相同,這才是原本的意圖,而不是與 gb_sets:delete/2 相同。依賴 gb_sets:del_element/2 如果元素不存在會導致錯誤的程式碼,必須變更為呼叫 gb_sets:delete/2

    此文件更新了說明文件,明確記錄了先前僅以已記錄函數的「別名」提及的函數。此外,還新增了 gb_setssetsordsets 共用的所有函數列表。

    * 潛在的不相容性 *

    自有編號:OTP-5277

  • 已從 QLC 模組中移除除錯訊息。

    自有編號:OTP-5283

改進和新功能

  • 已減少從 dets:match/1,3dets:match_object/1,3dets:select/1,3 返回的續傳大小。這會影響 Mnesia 在評估 QLC 查詢時節點之間傳送的資料量。

    自有編號:OTP-5232

STDLIB 1.13.2

改進和新功能

  • 用於啟動遠端 shell 的 -rsh 開關(隨 OTP-5210 引入)與 slave 已使用的現有開關衝突。因此,遠端 shell 的開關現在改名為 -remsh

    自有編號:OTP-5248,輔助編號:OTP-5210

STDLIB 1.13.1

已修正的錯誤和故障

  • Pman 的「追蹤 shell」功能已損壞,現已修復。此外,如果節點上有多個 shell 程序正在執行,Pman 無法正確找到活動 shell 的 PID。此問題也已修正。

    自有編號:OTP-5191

  • 當使用未記載的「參數化模組」功能時,?MODULE 巨集無法正常運作。

    自有編號:OTP-5224

改進和新功能

  • 您現在可以使用 -rsh 標誌啟動 Erlang,這會為您提供遠端初始 shell,而不是本機 shell。範例:

                erl -sname this_node -rsh other_node@other_host

    自有編號:OTP-5210

  • 已更新 lists 模組的手冊頁面,新增對新的 zipunzippartition/2 函數的描述。

    自有編號:OTP-5213

  • 在 JCL 模式下,頂層群組領導者過去會列為工作清單中的工作 #1。由於沒有與此程序相關聯的 shell 可連接,因此將不再列出。

    自有編號:OTP-5214

  • 為了保持向後相容性,已重新引入與系統其餘部分並行啟動 Erlang shell 的可能性。請注意,這種舊行為容易出錯,除非有必要,否則不應使用。

    自有編號:OTP-5218,輔助編號:seq9534

  • shell 命令 rr/1,2,3 現在在從 BEAM 檔案讀取記錄定義時接受萬用字元。

    自有編號:OTP-5226