檢視原始碼 核心版本發行說明

本文檔描述了對 Kernel 應用程式所做的變更。

Kernel 10.2

已修正的錯誤和故障

  • gen_sctp:peeloff/2 已修正,使其更像 gen_tcp:accept/1 一樣,將 socket 選項繼承到剝離的 socket,例如選項 tostclass

    當設定平台上不支援的 SCTP 選項時,某些選項應被靜默忽略,但由於一個錯誤導致選項解析脫軌,因此後續的選項可能會跳出並導致錯誤。此問題已修正。

    自有 ID:OTP-19225 輔助 ID:PR-8789

  • 現在可以透過再次按下 ^[h 來展開按下 ^[h 所顯示的說明文字。

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

  • 當使用 inet_backend = socket 時,inet:getifaddrs/0,1 已獲得改進。

    自有 ID:OTP-19264

  • 已修正 logger:report/0,以強制要求報告中至少有一個元素。這修正了所有使用 logger:report/0logger 函數中重疊 spec 網域的問題。

    自有 ID:OTP-19302 輔助 ID:PR-8959

  • 已修正 code_server 上的死鎖。多個呼叫載入具有 on_load 函數載入呼叫的相同模組會產生死鎖。

    自有 ID:OTP-19305 輔助 ID:PR-8744, GH-7466, GH-8510

改進和新功能

  • Kernel 應用程式現在可以識別 epmd_moduleerl_epmd_listen_port 參數,類似於 -kernel:connect_all

    自有 ID:OTP-19253 輔助 ID:PR-8671

  • 為了提高與意外使用 atom 的舊組態的相容性,inetrc 核心參數現在會再次容忍 atom。

    預期的類型始終是且仍然是字串。

    自有 ID:OTP-19280 輔助 ID:GH-8899, PR-8902

  • 已更新 file:io_device/0 類型,以清楚顯示 rawcooked IoDevice 之間的差異。

    自有 ID:OTP-19301 輔助 ID:PR-8956

  • 已更新 Erlang/OTP 類型規格,以消除重疊的網域。

    自有 ID:OTP-19310 輔助 ID:GH-8810, GH-8821, PR-8986

  • 新增核心參數 os_cmd_shell,用於控制 os:cmd/1 應使用哪個 shell。

    自有 ID:OTP-19342 輔助 ID:PR-8972

  • 新增對 io:user/0io:standard_io/0io:standard_error/0 的記錄支援。有關詳細資訊,請參閱 io:setopts/2

    自有 ID:OTP-19372 輔助 ID:PR-8947

Kernel 10.1.2

已修正的錯誤和故障

  • 在 Windows 上,即使未讀取所有資料,socket:recv 也可能會傳回成功 ({ok, Data})。

    自有 ID:OTP-19328

  • 網域本機上的 gen_udp:send 可能會洩漏 inet_reply 訊息。

    自有 ID:OTP-19332 輔助 ID:#8989

  • 當 inet_backend = socket 且具有某些 IPv6 socket 選項時,無法建立 UDP IPv6 socket。

    自有 ID:OTP-19357

  • net:getifaddrs 無法正確報告 Windows 上的執行旗標。

    自有 ID:OTP-19366 輔助 ID:OTP-19061, ERIERL-1134

Kernel 10.1.1

已修正的錯誤和故障

  • 已修正一個錯誤,當使用 gen_sctp 接收 SCTP 訊息時,可能會浪費訊息的第一個片段,而只傳遞最後一個片段。

    當作業系統發出訊號表示 socket 已準備好讀取時,結合內部逾時重試,發生此情況的機率很低。

    已修正一個錯誤,該錯誤是 SCTP 連線後殘留的逾時,可能會停止使用中的 gen_tcp socket 上的輸入訊息流。

    自有 ID:OTP-19235 輔助 ID:ERIERL-1133, PR-8837

  • 已新增 SCTP 的布林選項 non_block_send,以便能夠實現舊的行為,避免透過傳遞作業系統網路堆疊錯誤訊息 ({error,eagain}) 來封鎖傳送操作。

    自有 ID:OTP-19258 輔助 ID:OTP-19061, ERIERL-1134

Kernel 10.1

已修正的錯誤和故障

  • 已更正 prim_tty 模組中的錯誤判斷提示。當從 stdin 讀取無效的 UTF-8 時,剛好在模式從 unicode 變更為 latin1 時,可能會觸發此判斷提示。

    自有 ID:OTP-19097 輔助 ID:PR-8503

  • 開啟 disk_log 檔案並結合 head_funcrotate 選項無法運作。

    自有 ID:OTP-19104 輔助 ID:ERIERL-870

  • 已修正非本機 pid 上 erlang:is_process_alive/1 的錯誤資訊輸出。

    自有 ID:OTP-19134 輔助 ID:PR-8560

  • 已修正 SSL 分發的 kTLS 風格中的競爭條件,以便 inet_drv.c 不會提前讀取太多資料,這可能會導致在某些加密資料已以未加密形式讀入 inet_drv.c 緩衝區時,過晚啟動 kTLS 加密。

    自有 ID:OTP-19175 輔助 ID:GH-8561, PR-8690

  • 已修正應用程式在啟動期間當機且記錄訊息已傳送到標準輸出時的死鎖。記錄器將無法將訊息列印到標準輸出,而是將它們列印到標準錯誤。

    自有 ID:OTP-19205

  • 指定多次時,-proto_dist 初始化參數將不再被忽略。它現在會記錄警告並使用第一個指定的值。

    自有 ID:OTP-19208 輔助 ID:PR-8672

  • 已更正 genaddr (SIOCGENADDR) 的 socket:ioctl。

    自有 ID:OTP-19216

改進和新功能

  • 已將函數 getservbynamegetservbyport 新增到 net 模組。

    自有 ID:OTP-19101 輔助 ID:OTP-18835

  • 引入了 inet 函數的 enet | esock 變體,無論是使用 socket 呼叫、使用明確的 inet_backend 組態還是使用 e inet_backend 核心組態選項呼叫。

    自有 ID:OTP-19132 輔助 ID:OTP-19101

  • 函數 socket:i/0 現在使用 net 模組 (而不是 inet 模組) 進行服務轉換。

    自有 ID:OTP-19138 輔助 ID:OTP-19101

  • 已為 gen_tcp 實作布林選項 read_ahead,預設為 true,以便於不讀取超過 (快取資料) 封包結尾。特別是對於 kTLS,快取資料可能會讀取平台網路堆疊應該解密的資料,然後才能啟動加密參數。

    自有 ID:OTP-19199 輔助 ID:OTP-19175, GH-8561, GH-8690, GH-8785

Kernel 10.0.1

改進和新功能

Kernel 10.0

已修正的錯誤和故障

  • 修正了使用空選項清單呼叫 file:delete/2 時當機的問題。

    自有 ID:OTP-18590 輔助 ID:PR-7220

  • 已將新函數新增到未記載的模組 m:inet_dns,這些函數採用一個旗標來指定編碼/解碼是否用於 mDNS。這會影響如何處理私有範圍內最高位設定的 CLASS 值。

    自有 ID:OTP-18878 輔助 ID:GH-7718, OTP-17734

  • 已更正 erlang:phash/2 的錯誤資訊。

    自有 ID:OTP-18904 輔助 ID:PR-7960

  • eof 是回呼傳回的最後一個項目時,使用 I/O 通訊協定的 get_until 要求現在會正確傳回二進位或清單。

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

  • 現在可以使用組態選項呼叫 logger:add_handlers/1

    自有 ID:OTP-18954 輔助 ID:GH-8061, PR-8076

  • 現在,code:del_path/1 函式也適用於透過 -pa-pz-path 和啟動腳本新增的路徑。

    專屬 ID:OTP-18959 輔助 ID:GH-6692PR-7697

  • 在 Windows 上,若資料立即可用,使用 Timeout = 0 呼叫 socket:[recv|recvfrom|recvmsg]/* 可能會導致(case 子句)崩潰。

    專屬 ID:OTP-19063 輔助 ID:OTP-18835

  • 針對舊版 libc 的系統,改善 shell 中判斷字元是否為寬字元的啟發式演算法。

    專屬 ID:OTP-19087 輔助 ID:PR-8382

  • 修正從 io:user/0 讀取行時,當 erl 使用 -noshell 啟動時,不將沒有 \n\r 視為新行的問題。

    專屬 ID:OTP-19088 輔助 ID:PR-8396GH-8360

改進與新功能

  • 新增了帶有 raw 選項的 file:read_file/2,用於讀取檔案時不經過檔案伺服器。

    專屬 ID:OTP-18589 輔助 ID:PR-7220

  • 未記載的 Erlang DNS 解析器函式庫(inet_dnsinet_res)已擴充,可處理 IXFR、NOTIFY、UPDATE 和 TSIG 記錄。此外,還進行了一些錯誤修復和程式碼清理,並且測試套件中使用的解析器已變更為 Knot DNS。請參閱原始碼。

    感謝 Alexander Clouter 完成了幾乎所有的工作!

    專屬 ID:OTP-18713 輔助 ID:PR-6985GH-6985

  • 現在會快取 escript 的 ebin 目錄。

    專屬 ID:OTP-18778 輔助 ID:PR-7556

  • 已將 -callback 屬性新增至 applicationlogger_handlerlogger_formatter

    專屬 ID:OTP-18795 輔助 ID:PR-7703

  • 當記錄層級設定為除錯時,現在會記錄在記錄器啟動之前發出的進度報告。

    專屬 ID:OTP-18807 輔助 ID:PR-7732 ERIERL-985

  • 現在,code:where_is_file/2code:which/1 函式會直接檢查檔案是否存在,而不是列出程式碼路徑中每個目錄的內容。

    專屬 ID:OTP-18816 輔助 ID:PR-7711

  • 已將型別規範新增至 logger:Level/1,2,3 函式。

    專屬 ID:OTP-18820 輔助 ID:PR-7779

  • 對於 inet_backend = socket,單獨將 active socket 選項設定為 oncetrueN 已經過最佳化,並且對應的資料傳輸也經過最佳化。

    專屬 ID:OTP-18835

  • 新增了用於傳送 I/O 向量的新函式 socket:sendv/*

    專屬 ID:OTP-18845

  • 現在,shell 會為文件說明命令(h(Module))、自動完成和搜尋命令的長輸出分頁。

    專屬 ID:OTP-18846 輔助 ID:PR-7845

  • JIT 中已實作原生涵蓋範圍支援。它會自動由 cover 工具使用,以減少執行涵蓋範圍編譯的程式碼時的執行額外負荷。

    還有新的 API 可支援不使用 cover 工具的原生涵蓋範圍。

    若要檢測原生涵蓋範圍的程式碼,必須使用 line_coverage 選項編譯。

    若要在執行階段系統中啟用原生涵蓋範圍,請像這樣啟動它

    $ erl +JPcover true

    以下還有用於支援原生涵蓋範圍的新函式

    專屬 ID:OTP-18856 輔助 ID:PR-7856

  • 透過將某些操作從程式碼伺服器移至呼叫端,最佳化程式碼載入。

    專屬 ID:OTP-18941 輔助 ID:PR-7981

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

    專屬 ID:OTP-18955 輔助 ID:PR-8026

  • 透過移除中間程序,最佳化應用程式啟動。

    專屬 ID:OTP-18963 輔助 ID:PR-8042

  • 現有實驗性封存檔案支援將在未來版本中變更。在 escript 中使用封存的支援將保留,但在發行版本中使用封存的支援將會受到更多限制或完全移除。

    從 Erlang/OTP 27 開始,函式 code:lib_dir/2-code_path_choice 旗標,以及使用 erl_prim_loader 讀取封存的成員都已棄用。

    若要與未來版本的 Erlang/OTP 相容,需要從其封存擷取資料檔案的 escript 腳本應使用 escript:extract/2,而不是 erl_prim_loadercode:lib_dir/2

    可能不相容

    專屬 ID:OTP-18966 輔助 ID:PR-8091

  • 已移除未記載且已棄用的 file:pid2name 函式。

    專屬 ID:OTP-18967 輔助 ID:PR-8092

  • Kernel 中有一個新的模組 trace,它提供與 erlang:trace/3erlang:trace_pattern/3 相同的追蹤功能,但新增了動態隔離追蹤工作階段

    專屬 ID:OTP-18980

  • io:standard_io/0 讀取器和/或寫入器因錯誤而終止時,已改善錯誤記錄。

    專屬 ID:OTP-18989 輔助 ID:PR-8103

  • 已最佳化並重構 inet_backend = socket,使其更符合原始的 inet_backend = inet

    專屬 ID:OTP-19004 輔助 ID:OTP-18835

  • 將簡單範例(回音伺服器)新增至 socket 使用者指南。

    專屬 ID:OTP-19042

  • 已改善 inet:i/0,1,2,允許明確顯示連接埠號碼。

    專屬 ID:OTP-19053 輔助 ID:#6724

  • 已重構 socket 文件,因此修正了一些細節

    • 現在,socket:is_supported/1 會針對例如 protocols(屬於「類別」而非項目)傳回 true
    • 對於由其他程序設定的監控器,socket:cancel_monitor/1 不再傳回 badargs,而是像其他不明的 reference() 一樣傳回 false

    專屬 ID:OTP-19054

  • stdinstdoutstderr 金鑰新增至 io:getopts/1 中的 io:standard_io/0,以指示各個 I/O 裝置是否由終端機支援。

    專屬 ID:OTP-19089 輔助 ID:PR-8396

Kernel 9.2.4.4

已修正的錯誤和故障

  • 網域本機上的 gen_udp:send 可能會洩漏 inet_reply 訊息。

    專屬 ID:OTP-19332 輔助 ID:#8989

  • 當 inet_backend = socket 且具有某些 IPv6 socket 選項時,無法建立 UDP IPv6 socket。

    自有 ID:OTP-19357

  • net:getifaddrs 無法正確報告 Windows 上的執行旗標。

    自有 ID:OTP-19366 輔助 ID:OTP-19061, ERIERL-1134

Kernel 9.2.4.3

已修正的錯誤和故障

  • 修正了使用 `gen_sctp` 接收 SCTP 訊息時,可能會浪費訊息的第一個片段,而只傳遞最後一個片段的錯誤。

    當作業系統發出訊號表示 socket 已準備好讀取時,結合內部逾時重試,發生此情況的機率很低。

    修正了 SCTP 連線後殘留的逾時錯誤,該錯誤可能會停止主動 `gen_tcp` socket 上的輸入訊息流。

    專屬 ID:OTP-19235 輔助 ID:ERIERL-1133、PR-8837

  • 已新增 SCTP 的布林選項 `non_block_send`,以便能夠達成舊行為,透過傳遞 OS 網路堆疊錯誤訊息 (`{error,eagain}`) 來避免封鎖傳送作業。

    自有 ID:OTP-19258 輔助 ID:OTP-19061, ERIERL-1134

Kernel 9.2.4.2

已修正的錯誤和故障

  • 已修復 SSL 發佈的 kTLS 風格中的競爭條件,因此 inet_drv.c 不會預先讀取過多資料,這可能會導致在某些已加密資料以未加密方式讀入 inet_drv.c 緩衝區時,過晚啟動 kTLS 加密。

    專屬 ID:OTP-19175 輔助 ID:GH-8561、PR-8690

  • 修正了應用程式在啟動期間當機,且記錄訊息傳送至標準輸出時的死鎖。記錄器將無法將訊息列印到標準輸出,而是將其列印到標準錯誤。

    自有 ID:OTP-19205

  • 新增 stdlib 應用程式參數 shell_redraw_prompt_on_output,當設定為 false 時,如果進行任何其他輸出,會停用 shell 提示的重繪。

    專屬 ID:OTP-19213 輔助 ID:PR-8763 ERIERL-1108

Kernel 9.2.4.1

已修正的錯誤和故障

  • 在 Windows 上,若資料立即可用,使用 Timeout = 0 呼叫 socket:[recv|recvfrom|recvmsg]/* 可能會導致(case 子句)崩潰。

    專屬 ID:OTP-19063 輔助 ID:OTP-18835

  • 開啟 disk_log 檔案並將 head_funcrotate 選項結合使用時無法運作。

    自有 ID:OTP-19104 輔助 ID:ERIERL-870

Kernel 9.2.4

已修正的錯誤和故障

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

    專屬 ID:OTP-19072 輔助 ID:PR-8391

  • 修正當系統終止時,對封鎖 application API 的呼叫,使其在呼叫時會擲回原因為 terminating 的例外狀況。

    這樣做是為了避免在關閉或重新啟動期間發生死鎖。

    專屬 ID:OTP-19078 輔助 ID:PR-8422

Kernel 9.2.3

已修正的錯誤和故障

  • 當使用 IPv6 時,傳統 gen_udp 無法新增(群組)成員資格(改用刪除)。

    專屬 ID:OTP-19049 輔助 ID:#8176

  • inet_res 中 RD 位元的檢查已稍微放寬。

    專屬 ID:OTP-19056 輔助 ID:PR-8312、OTP-17323

Kernel 9.2.2

已修正的錯誤和故障

  • 修正使用 io:freadstandard_io 讀取時的效能錯誤。此回歸是在 OTP 26.0 中引入的。

    專屬 ID:OTP-18910 輔助 ID:PR-7933 GH-7924

  • 程式碼伺服器中的錯誤可能會在某些並行情況下導致其當機。此錯誤是在 26.1 中引入的。

    專屬 ID:OTP-18948 輔助 ID:PR-8046

  • 修正 gen_udp:open/2 的類型規格,使其包含已支援的模組 socket 位址類型。

    Own Id: OTP-18990 Aux Id: GH-8158

  • 修正 ssh 客戶端在 user_interactive 模式下讀取密碼的問題。

    Own Id: OTP-19007 Aux Id: ERIERL-1049

Kernel 9.2.1

修正錯誤與故障

  • 修正 group (即 shell) 在 get_until 回呼函式偵測到 eof 時,回傳 {done, eof, []} 時,能正確處理的情況。

    Own Id: OTP-18901

Kernel 9.2

修正錯誤與故障

  • 對於 inet_backend = socket,非預期的接收錯誤,例如 etimedout,會導致接收狀態機伺服器崩潰。此錯誤現已修正。

    Own Id: OTP-18749 Aux Id: GH-7608

  • 修正使用 file 從啟用 Unicode 的 standard_iostandard_error 或任何其他 group 後端裝置讀取時,會導致傳回不正確的值或崩潰的錯誤。

    現在,當使用 file 讀取 Unicode 資料時,會向呼叫者傳回 no_translation 錯誤。有關如何從 standard_io 正確讀取的更多詳細資訊,請參閱 STDLIB 使用者指南中的使用 Unicode

    Own Id: OTP-18800 Aux Id: PR-7714 GH-7591

  • 原生解析器介面模組已重寫其 ETS 表格處理方式,以最大限度地減少 term 的複製,並將客戶端逾時的處理移至客戶端,這有助於原生解析器名稱伺服器在高負載時避免陷入困境。

    Own Id: OTP-18812 Aux Id: ERIERL-997

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

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

  • 修正當客戶端進程監控群組/範圍並加入群組時,pg 中的錯誤。此類進程的終止會導致 pg 伺服器進程崩潰。

    Own Id: OTP-18833 Aux Id: GH-7625, PR-7659

  • 修正使用 file:consult 時,底層檔案讀取在讀取時傳回錯誤而導致的崩潰。

    Own Id: OTP-18873 Aux Id: PR-7831

  • 修正 gen_tcp_socket 監聽選項處理。

    Own Id: OTP-18883 Aux Id: #7764

改進與新功能

  • 為 DGRAM socket 連線新增 Windows 支援。

    Own Id: OTP-18762

  • 記錄之前不透明的類型 select_tag() 和 completion_tag()。

    Own Id: OTP-18818 Aux Id: #7337

Kernel 9.1

修正錯誤與故障

  • 修正模擬器啟動失敗時,崩潰標語遭截斷的問題。

    Own Id: OTP-18623 Aux Id: GH-7344

  • 修正 shell:start_interactive 函式規格。

    Own Id: OTP-18628 Aux Id: GH-7280

  • 修正 code:get_doc/1 在找不到 erts 時傳回 missing,而不是崩潰。

    Own Id: OTP-18654 Aux Id: PR-7404

  • 函式 socket:close/1 可能會在 Windows 上導致 VM 崩潰。

    Own Id: OTP-18669 Aux Id: OTP-18029

  • 修正當 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

  • 修正記錄器的過載保護機制,僅在需要時提取訊息使用的記憶體。

    Own Id: OTP-18677 Aux Id: PR-7418 GH-7417

  • 修正了一些與 socket 相關的問題,這些問題導致與 gen_tcp 和 gen_udp 分別不相容。

    Own Id: OTP-18685

  • 由於缺少回呼函式,因此使用 socket 位址和 socket (inet-) 後端的 gen_tcp:connect 失敗。

    Own Id: OTP-18707 Aux Id: #7530

  • `inet_res` 使用的 DNS RR 快取已修正為保留插入順序,當 DNS 伺服器為了例如負載平衡而以特定順序傳回 RR 時,這很有幫助。

    Own Id: OTP-18731 Aux Id: GH-7577, PR-7578

  • 選項 `reuseport`、`reuseport_lb` 和 `exclusiveaddruse` 無意間不允許用於例如 `gen_udp:open/1,2`,現在已更正此問題。

    Own Id: OTP-18734 Aux Id: OTP-18344, PR-6522, GH-6461, GH-7569

  • 修正了二進位模式和被動模式下用於 Unix 網域 Socket 的 gen_udp:recv/* 不會崩潰的問題。

    Own Id: OTP-18747 Aux Id: GH-7605

  • 修正導覽 shell 歷史記錄時,游標不會放置在運算式末端的問題。

    Own Id: OTP-18757 Aux Id: PR-7631

改進與新功能

  • 更新 gen_tcp_socket 和 gen_udp_socket 以處理「completion」(Windows 上的 socket)。

    Own Id: OTP-18586 Aux Id: OTP-18029

  • 在 Windows 上為 'socket' 新增對 Unix 網域 Socket (僅限 STREAM socket) 的基本支援。

    Own Id: OTP-18611 Aux Id: OTP-18029, #5024

  • 在 Windows 上新增對 socket ioctl 的基本支援。

    Own Id: OTP-18660

  • 現在匯出 file:location/0 類型。

    Own Id: OTP-18681

  • 新增對 (Windows) socket 選項 exclusiveaddruse 的支援。

    Own Id: OTP-18686

  • [socket] 新增對 'nopush' 選項的支援。

    Own Id: OTP-18687

  • 新增對 socket 選項 'BSP STATE' 的支援。

    Own Id: OTP-18693

  • 新增 tcp socket 選項 'keepcnt'、'keepidle' 和 'keepintvl'。

    Own Id: OTP-18698

  • 新增對 misc (Windows) socket 選項 ('max_msg_size' 和 'maxdg') 的支援。

    Own Id: OTP-18710

  • 現在可以設定 shell 的鍵盤快速鍵。

    Own Id: OTP-18754 Aux Id: PR-7604 PR-7647

  • 最佳化 code_server 以減少同時載入相同模組時的重複工作。

    Own Id: OTP-18755 Aux Id: PR-7503

Kernel 9.0.2

修正錯誤與故障

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

    Own Id: OTP-18580 Aux Id: PR-7242

  • 修正當 termcap 不可用時,shell 不會在啟動時崩潰的問題。

    Own Id: OTP-18624 Aux Id: GH-7296

  • 多個 socket:accept 呼叫問題。在發出多個 accept 呼叫時,只有最後一個呼叫處於活動狀態。

    Own Id: OTP-18635 Aux Id: #7328

  • 修正 shell,使其在終端機功能報告應使用延遲時,忽略終端機延遲。

    Own Id: OTP-18636 Aux Id: PR-7352 GH-7308

  • 修正 "oldshell" 在 Windows 上輸入時會回顯字元的問題。

    Own Id: OTP-18637 Aux Id: PR-7359 GH-7324

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

    Own Id: OTP-18640 Aux Id: PR-7384 GH-7368 GH-7286 GH-6881

  • 在 Windows 上,當有正在等待讀取、寫入或接受函式的活動呼叫時,呼叫函式 socket:close 可能會掛起。

    Own Id: OTP-18646

  • 修正在使用 -noshell 旗標啟動 erl.exe 時,讀取或設定 Windows 上的 standard_io 時的問題。

    Own Id: OTP-18649 Aux Id: GH-7261 PR-7400

  • 當位址是主機名稱 (字串或原子) 時,inet_backend = socket 的 gen_udp:connect 會失敗。

    Own Id: OTP-18650

  • 修正如果將特定跳脫序列寫入 stdout,會導致 shell 崩潰的問題。

    Own Id: OTP-18651 Aux Id: PR-7242

  • 修正如果在 shell 中寫入提示符號後才收到輸出,輸出會消失的問題。

    Own Id: OTP-18652 Aux Id: PR-7242

  • 修正了在 rebar3 開發組建中找不到 erts 位置的崩潰問題。

    Own Id: OTP-18656 Aux Id: PR-7404 GH-7390

  • 引入 KERNEL 應用程式參數 standard_io_encoding,可用於設定 standard_io 的預設編碼。如果應用程式想要將所有輸入資料視為位元組,而不是 utf-8 編碼字元,則必須將此選項設定為 latin1

    Own Id: OTP-18657 Aux Id: GH-7230 PR-7384

Kernel 9.0.1

修正錯誤與故障

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

    Own Id: OTP-18578 Aux Id: GH-7213

  • 修正了 socket 傳送函式說明 (以 Timeout = nowait 傳送)。傳送函式無法傳回 {ok, {RestData, SelectInfo}}

    Own Id: OTP-18584 Aux Id: #7238

Kernel 9.0

修正錯誤與故障

  • 修正了應用程式的 .app 檔案中允許重複鍵的錯誤。現在會拒絕重複鍵,如果存在,應用程式將無法啟動。

    * 可能的不相容性 *

    Own Id: OTP-18210 Aux Id: GH-5877 PR-5878

  • 修正 logger_formatter 中條件分支中分支值的不一致處理。例如,在此修正之前,在條件分支中使用 msg 不會如預期般格式化。

    Own Id: OTP-18225 Aux Id: PR-6036

  • 修正 logger_std_h 處理常式,使其在因任何原因而無法記錄到 standard_io 時,記錄到 standard_error。

    Own Id: OTP-18226 Aux Id: PR-6253

  • 修正 TLS 分發,使其在以嵌入模式啟動 Erlang 時,以及在核心完全啟動之前完成連線時正常運作。

    Own Id: OTP-18248 Aux Id: PR-6227 GH-6085

  • 改進了 erl -remsh,以提供更好的錯誤原因,並在使用沒有終端機支援的 shell (即 "oldshell") 時正常運作。

    Own Id: OTP-18271 Aux Id: PR-6279

  • 修正核心啟動前產生的記錄事件的記錄,使其在格式化這些記錄訊息的程式碼尚未載入時不會失敗。

    Own Id: OTP-18286 Aux Id: PR-5955

  • 當啟動的進程失敗時,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

  • 修正了 seq_trace:get_token/1 的返回類型。

    自有 Id: OTP-18528 輔助 Id: PR-7009

  • 現在,查找、連線到以及傳送訊息到名稱為空的伺服器時,會嘗試查找根網域的位址,若失敗則會回報錯誤。先前,這些操作中的某些會導致內部異常,這與類型規範相矛盾。

    自有 Id: OTP-18543 輔助 Id: GH-6353

  • 將正則表達式替換為 ANSI Select Graphic Rendition 跳脫字元的特殊情況處理,以加速使用這些跳脫序列的 io 輸出。

    自有 Id: OTP-18547 輔助 Id: PR-7092

改進和新功能

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

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

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

  • 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。
    • 現在可以使用 JCL 介面啟動的遠端節點進行 Tab 擴充。
    • 現在可以配置 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

  • 新增對 Windows 上 Socket 的支援。

    • 預先發布狀態。
    • 錯誤碼尚未最終確定。
    • 不支援 Windows 特有選項 (Socket 選項、讀取和寫入的旗標)。
    • 用於 Windows 的新非同步 API (完成)。請參閱 (Socket 使用) 使用者指南中的 非同步呼叫章節。
    • 為了確保平台的獨立性,_預期_ 使用 gentcp 和 gen_udp (尚未更新)。

    自有 Id: OTP-18029

  • 自 OTP 24 發布以來宣布,

    • 外部 term 格式中版本 4 節點容器類型的支援現在是強制性的。也就是說,支援最多 5 個 32 位元整數識別碼的參考,以及支援 64 位元資料儲存的程序和連接埠識別碼。因此,分發旗標 DFLAG_V4_NC 現在也是強制性的。自 OTP 24 以來,OTP 一直支援此功能。另請注意,term_to_binary()term_to_iovec() 產生的外部格式將無條件產生支援此較大格式的 pid、連接埠和參考。
    • OTP 23.3 中引入的新連結協定現在是強制性的。因此,分發旗標 DFLAG_UNLINK_ID 現在也是強制性的。

    由於上述原因,OTP 26 節點將拒絕連線到 OTP 24 之前版本中的 OTP 節點。

    * 可能的不相容性 *

    自有 Id: OTP-18140 輔助 Id: PR-6072

  • SSL 應用程式已新增對核心 TLS (kTLS) 的支援,用於 TLS 分發 (-proto_dist inet_tls),SSL 選項 {ktls, true}。由於需要與平台高度相關的原始選項,因此將其用於一般 SSL Socket 不方便、未記錄且不建議。

    目前,這僅適用於一些不太舊的 Linux 發行版。大致上,需要具有使用者空間協定支援且具有核心模組 tls 的核心 5.2.0 或更高版本。

    自有 Id: OTP-18235 輔助 Id: PR-6104, PR-5840

  • 新增 code:get_doc/2,它支援使用 debug_info 區塊而非 eep48 doc 區塊來擷取函式的文件框架。

    自有 Id: OTP-18261 輔助 Id: PR-5924

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

    此行為可以使用 shell_expand_location STDLIB 配置參數進行配置。

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

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

    * 可能的不相容性 *

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

  • 透過快取回呼函式來優化 gen_server

    自有 Id: OTP-18305 輔助 Id: PR-5831

  • 為升級準備 pg 通訊協定。計劃是讓 OTP-28 節點能夠使用升級的 pg 協定,同時仍能與 OTP 26 節點通訊。

    自有 Id: OTP-18327 輔助 Id: PR-6433

  • 新的 disk_log 記錄類型 rotate,其中記錄檔在輪換時會壓縮。

    自有 Id: OTP-18331 輔助 Id: ERIERL-870

  • 已引入以下 inet:setopts/2 選項:

    • reuseport - 重新使用本機連接埠。負載平衡可能會或可能不會根據底層作業系統提供。

    • reuseport_lb - 重新使用本機連接埠。提供負載平衡。

    • exclusiveaddruse - Windows 上獨佔使用位址/連接埠。此 Socket 選項是 Windows 特有的,在其他系統上會被靜默忽略。

    在 Windows 上設定 reuseaddr 的行為已以不向後相容的方式變更。只有在同時設定了 reusaddrreuseport inet 選項時,才會設定底層 SO_REUSEADDR Socket 選項。這是因為 Windows 上的底層 SO_REUSEADDR Socket 選項的行為類似於設定了底層 Socket 選項 SO_REUSEADDRSO_REUSEPORT 時 BSD 的行為。請參閱 reuseaddr 選項的文件以了解更多資訊。

    * 可能的不相容性 *

    自有 Id: OTP-18344 輔助 Id: PR-6522, PR-6944, OTP-18324, PR-6481, GH-6461

  • 將 size/1 替換為 tuple_size/1 或 byte_size/1

    size/1 BIF 未經 JIT 優化,其使用可能會導致 Dialyzer 的類型較差。

    當知道正在測試的值必須是 Tuple 時,應始終首選 tuple_size/1

    當知道正在測試的值必須是二進制時,應首選 byte_size/1。但是,byte_size/1 也接受位元字串 (將大小向上捨入為整數個位元組),因此必須確保在呼叫 byte_size/ 之前呼叫 is_binary/1,以確保拒絕位元字串。請注意,編譯器會移除對 is_binary/1 的多餘呼叫,因此如果不確定先前的程式碼是否已確保引數是二進制,則在呼叫 byte_size/1 之前新增 is_binary/1 測試並無害處。

    自有 Id: OTP-18405 輔助 Id: GH-6672,PR-6702,PR-6768,PR-6700,PR-6769,PR-6812,PR-6814

  • 函式 file:pid2name/1 已被棄用,並將在 Erlang/OTP 27 中移除。

    自有 Id: OTP-18419

  • Erlang DNS 解析器模組 inet_res 和輔助模組已針對 RFC6891 進行更新;以處理具有 DNSSEC OK (DO) 位元的 OPT RR。

    自有 Id: OTP-18442 輔助 Id: PR-6786, GH-6606

  • 引入了 application:get_supervisor/1

    自有 Id: OTP-18444 輔助 Id: PR-6035

  • 透過在嵌入式模式的啟動順序中新增額外步驟來改進啟動期間對 on_load 模組的處理,該步驟會執行所有 on_load 處理程式,而不是依賴稍後在核心監督樹狀結構啟動時明確調用它們。

    這主要是程式碼改進和 OTP 內部簡化,以避免未來的錯誤並簡化程式碼維護。

    專屬 ID:OTP-18447

  • 透過在客戶端執行程式碼準備來減少 code_server 的競爭。

    專屬 ID:OTP-18448 輔助 ID:PR-6736

  • 新增一個模式到 ensure_all_loaded,以並行啟動子應用程式及其依賴項。

    專屬 ID:OTP-18451 輔助 ID:PR-6737

  • 快取 OTP 啟動程式碼路徑,以限制模組查找期間存取的資料夾數量。可以使用 -cache_boot_path false 停用。OTP 啟動程式碼路徑包含 ERL_LIB 環境變數、各種 otp/*/ebin 資料夾,以及初始化腳本中的 {path, ...} 子句。

    專屬 ID:OTP-18452 輔助 ID:PR-6729

  • Kernel 和 SSL 中的 Erlang 分散式程式碼已進行一些重構,以利於除錯和重複使用,這不應對行為或效能產生任何明顯影響。

    專屬 ID:OTP-18456

  • 新增快取屬性到程式碼路徑 API。

    為所有 code:add_path、code:set_path 和 code:replace_path* 函數新增可選的 cache/nocache 引數。如果這些函數已快取,則會避免執行檔案存取。可以使用 code:clear_cache/0 清除快取。新增 code:del_paths/1 以更輕鬆地清除多個路徑。

    專屬 ID:OTP-18466 輔助 ID:PR-6832

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

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

  • 改進 code:ensure_modules_loaded/1:先前它會準備模組,然後在模組具有 on_load 回呼時放棄對這些模組的參照。此提取請求使其保留參照,然後依序載入它們,而無需再次取得物件程式碼並準備它們。

    專屬 ID:OTP-18484 輔助 ID:PR-6844

  • 內部 DNS 解析器已更新,以處理 DNS LOC RR:s (RFC 1876)。這是一個未記載的模組,但仍由進階使用者使用。請參閱原始程式碼。

    專屬 ID:OTP-18510 輔助 ID:GH-6098, PR-6982

  • 減少 global 在通知其他節點有關連線遺失時的記憶體消耗。

    專屬 ID:OTP-18521 輔助 ID:PR-7025

  • net_kernelglobalglobal_group 伺服器現在一直啟用完全非同步分散式訊號,可防止它們在傳送分散式訊號時被封鎖。

    關於封鎖分散式訊號的文件也已改進。

    專屬 ID:OTP-18533 輔助 ID:PR-7061

  • 允許 IPv6 位址作為 erlang:decode_packet/3gen_tcp 封包選項解碼的 http 封包中的主機。根據 RFC2732,IPv6 位址應以 [] 括起來。

    專屬 ID:OTP-18540 輔助 ID:PR-6900

  • 移除 OTP-26 中已棄用的函數

    專屬 ID:OTP-18542

  • 由於已移除 HiPE,因此移除 code:is_module_native/1。自 OTP 24 以來,它已被棄用,並計劃在 OTP 26 中移除。

    由於程式碼路徑功能不再存在,因此移除 code:rehash/0。自 OTP 19 以來,它已被棄用,並自 OTP 24 以來計劃在 OTP 26 中移除。

    * 可能的不相容性 *

    專屬 ID:OTP-18551 輔助 ID:PR-7106

  • 新增對 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

Kernel 8.5.4.3

修正的錯誤和故障

  • 修正 gen_udp:open/2 的類型規格,使其包含已支援的模組 socket 位址類型。

    專屬 ID:OTP-19050 輔助 ID:OTP-18990

Kernel 8.5.4.2

修正的錯誤和故障

  • 由於缺少回呼函式,因此使用 socket 位址和 socket (inet-) 後端的 gen_tcp:connect 失敗。

    Own Id: OTP-18707 Aux Id: #7530

Kernel 8.5.4.1

修正的錯誤和故障

  • 多個 socket:accept 呼叫問題。在發出多個 accept 呼叫時,只有最後一個呼叫處於活動狀態。

    Own Id: OTP-18635 Aux Id: #7328

  • 當位址是主機名稱 (字串或原子) 時,inet_backend = socket 的 gen_udp:connect 會失敗。

    Own Id: OTP-18650

Kernel 8.5.4

修正的錯誤和故障

  • 修正 Windows 上 file:read_file_info/1 在處理具有損毀中繼資料的檔案時會失敗的錯誤。

    專屬 ID:OTP-18348 輔助 ID:GH-6356

  • 接受來自未使用 epmd 的 OTP 23 和 24 節點的連線設定。

    專屬 ID:OTP-18404 輔助 ID:GH-6595, PR-6625

Kernel 8.5.3

修正的錯誤和故障

  • tcp 連線選項 'bind_to_device' 無法與 inet_backend = 'socket' 一起使用。'inet' 需要值類型 binarry(),而 'socket' 需要值類型 'string()'。

    專屬 ID:OTP-18357 輔助 ID:#6509

  • 使用 sockaddr() 和 inet_backend = socket 呼叫 gen_tcp:connect 時處理選項的次要問題。

    專屬 ID:OTP-18358 輔助 ID:#6528

Kernel 8.5.2

修正的錯誤和故障

  • 修正當另一端關閉 socket 時,gen_tcp socket 後端的關閉損毀問題。

    專屬 ID:OTP-18270 輔助 ID:#6331

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

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

  • 修正 os:cmd 不會將所有拋出的例外狀況轉譯為 badarg。例如,來自 erlang:open_portemfile 已轉譯為 badarg

    這個錯誤自 Erlang/OTP 24 以來一直存在。

    專屬 ID:OTP-18291 輔助 ID:PR-6382

  • 函數 net:if_names/0 的規格不正確

    專屬 ID:OTP-18296 輔助 ID:OTP-16464

  • 使用 'socket' inet_backend 時,缺少 TOS 和 TTL 的 ctrl 選項名稱轉換 (在 FreeBSD 上)。

    專屬 ID:OTP-18315

  • 具有選項 add_membership 或 drop_membership 的 gen_udp:open/2 會捨棄先前的選項。

    專屬 ID:OTP-18323 輔助 ID:#6476

  • 除非 socket 是 UDP socket,否則在 Windows 上,inet:setopts/2 {reuseaddr, true} 選項現在會被忽略。如需更多資訊,請參閱 inet:setopts/2 文件中 reuseaddr 選項的文件。

    在 OTP 25 之前,{reuseaddr, true} 選項在 Windows 上會忽略所有 socket,但自 OTP 25.0 起,此行為已變更為不會忽略任何 socket。

    * 可能的不相容性 *

    專屬 ID:OTP-18324 輔助 ID:GH-6461, PR-6481

改進和新功能

  • inet_tcp_dist 中的分散式 socket 選項處理已清理,以釐清哪些是強制性的,哪些只是具有預設值。

    專屬 ID:OTP-18293

  • 改進 gen_tcp_socket 的警告訊息格式。

    專屬 ID:OTP-18317

Kernel 8.5.1

修正的錯誤和故障

  • 使用 socket 模組建立的監聽 socket 會洩漏 (erlang-) 監視器。

    專屬 ID:OTP-18240 輔助 ID:#6285

  • 當監督控制連線的程序損毀時,peer 節點無法停止。當使用替代控制連線時,當啟動 peer 節點的節點停止該節點時,此監督程序也經常損毀,這會導致 peer 節點滯留,永遠無法停止。

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

Kernel 8.5

修正的錯誤和故障

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

    作為這些修正的建構區塊,已引入新的 BIF erlang:nodes/2,並且已擴充 net_kernel:monitor_nodes/2

    如果命令列上存在多個執行個體,-hidden-connect_all 命令列引數將無法運作,這已修正。也已引入新的核心參數 connect_all,以取代 -connect_all 命令列引數。

    專屬 ID:OTP-17934 輔助 ID:PR-6007

  • 修正 IPv6 multicast_if 和成員資格 socket 選項。

    專屬 ID:OTP-18091 輔助 ID:#5789

  • 修正 inet:getifaddrs 在純 IPv6 Windows 上掛起的問題

    專屬 ID:OTP-18102 輔助 ID:#5904

  • 已更正關於 SCTP 選項的 inet:getopts/2inet:setopts/2 的類型規格。

    專屬 ID:OTP-18115 輔助 ID:PR-5939

  • 已收緊 inet:parse_* 的類型規格。

    自有 ID:OTP-18121 輔助 ID:PR-5972

  • 修正 gen_tcp:connect/3 規格,以包含 inet_backend 選項。

    自有 ID:OTP-18171 輔助 ID:PR-6131

  • 修正當呼叫 logger:log(Level, Format, Args) (或任何其他記錄函式) 時,使用二進制資料作為格式會導致崩潰或錯誤記錄的錯誤。

    自有 ID:OTP-18229 輔助 ID:PR-6212

改進和新功能

  • 為基於 inet-driver 的 sockets (例如 gen_tcp 和 gen_udp) 新增基本的偵錯功能(選項)。

    自有 ID:OTP-18032

  • net_kernel:start/2 中引入了 hiddendist_listen 選項。

    同時也記錄了 -dist_listen 命令列參數,該參數錯誤地被記錄為 kernel 參數,而不是命令列參數。

    自有 ID:OTP-18107 輔助 ID:PR-6009

  • pg 中引入了範圍和群組監控。有關更多資訊,請參閱 pg:monitor_scope()pg:monitor()pg:demonitor() 的文件。

    自有 ID:OTP-18163 輔助 ID:PR-6058, PR-6275

  • 引入了一個新的函式 global:disconnect/0,可以使用該函式將節點從 global 節點叢集中乾淨地斷開連接。

    自有 ID:OTP-18232 輔助 ID:OTP-17843, PR-6264

Kernel 8.4.2

修正錯誤和故障

  • 在建立連線的同時呼叫 net_kernel:setopts(new, Opts) 可能會導致 net_kernel 進程和建立連線的進程之間發生死鎖。

    自有 ID:OTP-18198 輔助 ID:GH-6129, PR-6216

Kernel 8.4.1

修正錯誤和故障

  • DNS 解析器 inet_res 已修正,當驗證回應時,會忽略發送請求和接收回應之間請求網域中尾隨點的差異。

    自有 ID:OTP-18112 輔助 ID:ERIERL-811

  • 修正了 inet_res 中的一個錯誤,其中遺失的內部 {ok,_} 包裝器會導致 inet_res:resolve/* 在解析 IP 位址或身為 IP 位址字串的主機名稱時,傳回計算的主機名稱,而不是 {ok,Msg} 元組。

    自有 ID:OTP-18122 輔助 ID:GH-6015, PR-6020

  • erlang:is_alive() BIF 可能會在設定的分散式服務可用之前傳回 true。此錯誤是在 OTP 25.0 ERTS 版本 13.0 中引入的。

    erlang:monitor_node()erlang:monitor() BIF 即使在設定的分散式服務可用時,也可能會錯誤地失敗。如果這些 BIF 在使用動態節點名稱指派啟動分散式服務之後,但在名稱指派之前被呼叫,則會發生這種情況。

    自有 ID:OTP-18124 輔助 ID:OTP-17558, PR-6032

  • gen_tcp_dist 範例中新增了遺失的必要 address/0 回調。

    自有 ID:OTP-18136

Kernel 8.4

修正錯誤和故障

  • DNS 解析器的實作已重寫,以更徹底地驗證回覆,並進行少量最佳化以產生較少的垃圾。

    自有 ID:OTP-17323

  • 在 Windows 上,socket 選項 'reuseaddr' *不再*被忽略。

    自有 ID:OTP-17447 輔助 ID:GH-4819

  • 修正當呼叫 logger:log(Level, Format, Args) (或任何其他記錄函式) 時,使用原子 stringreport 作為格式會導致崩潰或錯誤記錄的錯誤。

    自有 ID:OTP-17551 輔助 ID:GH-5071 PR-5075

  • 從 OTP 25 開始,global 預設會透過主動斷開與報告已失去與其他節點連線的節點的連線,來防止因網路問題導致的重疊分割。這會導致形成完全連線的分割區,而不是將網路置於具有重疊分割區的狀態。

    可以使用 prevent_overlapping_partitions kernel(6) 參數停用防止重疊分割區的功能,使 global 的行為與過去相同。然而,對於所有預期提供完全連線網路的應用程式 (例如 mnesia),以及 global 本身而言,這都是有問題的。重疊分割區的網路可能會導致 global 的內部狀態變得不一致。即使在將這些分割區合併在一起以再次形成完全連線的網路之後,這種不一致性仍然可能存在。global 的內部狀態可能會變得不一致。此修正可能會造成難以偵測的細微問題,因此*強烈*建議*不要*停用此修正。另外請注意,此修正*必須*在網路中的*所有*節點上啟用才能正常運作。

    * 可能的不相容性 *

    自有 ID:OTP-17911 輔助 ID:PR-5687, PR-5611, OTP-17843

  • 用於名稱解析的輔助程式啟動;inet_gethost,已改進為使用絕對檔案系統路徑,以確保啟動正確的程式。

    如果無法啟動輔助程式,系統現在會停止,以避免在名稱解析器靜默損壞的情況下執行。

    自有 ID:OTP-17958 輔助 ID:OTP-17978

  • inet_res:getbyname/2,3 的類型規格已修正,以反映它可能會傳回特殊的 #hostent{} 記錄。

    自有 ID:OTP-17986 輔助 ID:PR-5412, PR-5803

  • code:module_status/1 總是會將從封存檔案載入的 BEAM 檔案回報為 modified,而且 code:modified_modules/0 總是會傳回從封存檔案載入的所有模組的名稱。

    自有 ID:OTP-17990 輔助 ID:GH-5801

  • 在 logger 中,透過使用 erlang 計時器而不是計時器模組的計時器來修正檔案處理程式關機延遲的問題。

    自有 ID:OTP-18001 輔助 ID:GH-5780 PR-5829

  • 修正 logger 在發生故障時產生的日誌事件中的中繼資料,使其不包含原始日誌事件的中繼資料。

    自有 ID:OTP-18003 輔助 ID:PR-5771

  • 修正 logger 檔案後端,使其在記錄資料夾被刪除後重新建立。

    自有 ID:OTP-18015 輔助 ID:GH-5828 PR-5845

  • [socket] sockaddr 的編碼已改進。

    自有 ID:OTP-18020

  • 修正 put_chars 對 io 伺服器發出具有不完整 Unicode 資料的請求時,會以 no_translation 錯誤退出的問題。

    自有 ID:OTP-18070 輔助 ID:PR-5885

改進和新功能

  • net 模組現在可在 Windows 上運作。

    自有 ID:OTP-16464

  • 如果安裝的 RELEASES 檔案中的路徑是相對於安裝根目錄的路徑,則 Erlang 安裝目錄現在可在檔案系統上重新定位。`release_handler:create_RELEASES/4 函式可以產生具有相對路徑的 RELEASES 檔案,如果它的 RootDir 參數設定為空字串的話。

    自有 ID:OTP-17304

  • 下列分散式旗標現在是強制性的:DFLAG_BIT_BINARIESDFLAG_EXPORT_PTR_TAGDFLAG_MAP_TAGSDFLAG_NEW_FLOATSDFLAG_FUN_TAGS。這主要關係到自己實作分散式協定的程式庫或應用程式。

    自有 ID:OTP-17318 輔助 ID:PR-4972

  • 修正 os:cmd 以在 Android OS 上運作。

    自有 ID:OTP-17479 輔助 ID:PR-4917

  • 組態檔案 .erlang.erlang.cookie.erlang.crypt 現在可以位於 XDG Config Home 目錄中。

    請參閱每個檔案的文件和 filename:basedir/2 以取得更多詳細資訊。

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

  • 動態節點名稱改進:erlang:is_alive/0 已變更為針對擱置的動態節點名稱傳回 true,以及新的函式 net_kernel:get_state/0

    自有 ID:OTP-17558 輔助 ID:OTP-17538, PR-5111, GH-5402

  • gen_statem 中回調結果類型的類型已擴充為具有 arity 2 類型,其中回調模組可以指定回調資料的類型,因此回調模組可以取得其類型驗證。

    自有 ID:OTP-17589 輔助 ID:PR-4926

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

    在確保所有盒裝項目在 arity 字組之後都至少配置一個字組後,這些最佳化才有可能實現。這已經透過讓所有空元組都參照相同的空元組常值來實現,這也減少了空元組的記憶體使用量。

    自有 ID:OTP-17608

  • 引入了 net_ticker_spawn_options kernel 組態參數,可以使用該參數為分散式通道計時器進程設定產生選項。

    自有 ID:OTP-17617 輔助 ID:PR-5069

  • 現在大多數,或者至少是最常使用的 rpc 操作,需要 erpc 的支援才能與其他 Erlang 節點進行通訊。erpc 是在 OTP 23 中引入的。也就是說,針對 OTP 23 之前的 Erlang 節點執行 rpc 操作將會失敗。

    * 可能的不相容性 *

    自有 ID:OTP-17681 輔助 ID:PR-5307

  • 新的模組 peer 取代了 slave 模組。slave 模組現在已被棄用,並將在 OTP 27 中移除。

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

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

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

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

  • 類型規範已新增至 gen_server,並且文件已更新以使用此規範。

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

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

  • IP 位址驗證函式 is_ipv4_address/1is_ipv6_address/1is_ip_address/1 已新增至 Kernel 中的模組 inet

    自有 ID:OTP-17923 輔助 ID:PR-5646

  • gen_sctp:connectx_init/* 的形式新增了多宿主 SCTP 連線的 API。

    自有 ID:OTP-17951 輔助 ID:PR-5656

  • [socket] 新增了 sockaddr_ll(系列 'packet')類型中 hatype 欄位的編碼。

    自有 ID:OTP-17968 輔助 ID:OTP-16464

  • 新增了 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

Kernel 8.3.2.4

已修復的錯誤和故障

  • 由於缺少回呼函式,因此使用 socket 位址和 socket (inet-) 後端的 gen_tcp:connect 失敗。

    Own Id: OTP-18707 Aux Id: #7530

Kernel 8.3.2.3

已修復的錯誤和故障

  • 函數 net:if_names/0 的規格不正確

    專屬 ID:OTP-18296 輔助 ID:OTP-16464

  • 使用 'socket' inet_backend 時,缺少 TOS 和 TTL 的 ctrl 選項名稱轉換 (在 FreeBSD 上)。

    專屬 ID:OTP-18315

  • tcp 連線選項 'bind_to_device' 無法與 inet_backend = 'socket' 一起使用。'inet' 需要值類型 binarry(),而 'socket' 需要值類型 'string()'。

    專屬 ID:OTP-18357 輔助 ID:#6509

  • 使用 sockaddr() 和 inet_backend = socket 呼叫 gen_tcp:connect 時處理選項的次要問題。

    專屬 ID:OTP-18358 輔助 ID:#6528

改進和新功能

  • 改進 gen_tcp_socket 的警告訊息格式。

    專屬 ID:OTP-18317

Kernel 8.3.2.2

改進和新功能

  • 引入了一個新的函式 global:disconnect/0,可以使用該函式將節點從 global 節點叢集中乾淨地斷開連接。

    自有 ID:OTP-18232 輔助 ID:OTP-17843, PR-6264

Kernel 8.3.2.1

已修復的錯誤和故障

  • 在建立連線的同時呼叫 net_kernel:setopts(new, Opts) 可能會導致 net_kernel 進程和建立連線的進程之間發生死鎖。

    自有 ID:OTP-18198 輔助 ID:GH-6129, PR-6216

Kernel 8.3.2

已修復的錯誤和故障

  • 使用 inet-backend 'socket' 建立的 socket,其 'raw' 選項的 inet:getopts/2 失敗。

    自有 ID:OTP-18078 輔助 ID:GH-5930

  • 更正了搭配 inet_backend = socket 使用時的關閉函式行為。它與「舊」gen_tcp 的相容性不足。

    自有 ID:OTP-18080 輔助 ID:GH-5930

Kernel 8.3.1

已修復的錯誤和故障

  • 修復了先前來自相同節點的已建立連線靜默關閉後,接受連線設定失敗的問題。

    自有 ID:OTP-17979 輔助 ID:ERIERL-780

  • 修復了當歷史記錄檔存在問題時,在 shell 中輸入 Ctrl-R 可能會掛起的問題。

    自有 ID:OTP-17981 輔助 ID:PR-5791

Kernel 8.3

已修復的錯誤和故障

  • 已更正 gen_tcpsend_timeout 處理,以便即使在傳送 0 個位元組時,也會遵守逾時設定。

    自有 ID:OTP-17840

  • 預設情況下,當網路問題導致連線遺失時,global 不會採取任何動作來還原完全連線的網路。對於所有期望提供完全連線網路的應用程式來說,這是有問題的,例如 mnesia,以及 global 本身。重疊分割區的網路可能會導致 global 的內部狀態變得不一致。即使在這些分割區重新組合形成完全連線的網路之後,這種不一致仍然可能存在。對期望維護完全連線網路的其他應用程式的影響可能有所不同,但它們在這種分割期間可能會以非常微妙且難以偵測的方式發生錯誤。

    為了防止此類問題,我們引入了一個防止重疊分割區的修復程式,可以使用 prevent_overlapping_partitions kernel(6) 參數啟用。啟用此修復程式後,global 將主動從報告遺失與其他節點連線的節點斷開連線。這將導致形成完全連線的分割區,而不是將網路留在具有重疊分割區的狀態。請注意,此修復程式必須在網路中的所有節點上啟用才能正常運作。由於這相當大地改變了行為,因此目前預設情況下會停用此修復程式。但是,由於您可能會在沒有此修復程式的情況下遇到難以偵測的問題,因此強烈建議您啟用此修復程式,以避免出現上述問題。從 OTP 25 開始,此修復程式將預設為啟用。

    自有 ID:OTP-17843 輔助 ID:ERIERL-732、PR-5611

  • 修復了當記錄包含不正確清單的報告時,logger 會當機的錯誤。

    自有 ID:OTP-17851

  • 使 erlang:set_cookie 適用於動態節點名稱。

    自有 ID:OTP-17902 輔助 ID:GH-5402、PR-5670

改進和新功能

  • 新增了在使用 gen_sctp、gen_tcp 和 gen_udp 時使用 socket:sockaddr_in() 和 socket:sockaddr_in6() 的支援。這將可以讓您使用連結本機 IPv6 位址。

    自有 ID:OTP-17455 輔助 ID:GH-4852

  • 引入了一個 net_tickintensity kernel 參數。它可用於控制在 net_ticktime 期間的刻度數量。

    為了更容易新增新選項,還引入了新的 net_kernel:start/2 函式。已棄用 net_kernel:start/1 的使用。

    自有 ID:OTP-17905 輔助 ID:ERIERL-732、PR-5740

  • 改進了動態節點名稱功能的文件。

    自有 ID:OTP-17918

Kernel 8.2

已修復的錯誤和故障

  • socket:which_sockets( pid() ) 在查詢 socket 擁有者時使用了錯誤的關鍵字('ctrl' 而不是 'owner')。

    自有 ID:OTP-17716

  • 在 epmd_ntop 中,#if defined(EPMD6) 條件反轉了,只有在 EPMD6 未定義時才包含 IPv6 特定的程式碼。這導致 IPv6 位址被解釋為 IPv4 位址,並產生無意義的 IPv4 位址作為輸出。

    在錯誤記錄期間,有多個地方錯誤地使用了 'num_sockets' 而不是 'i' 來索引到 iserv_addr 陣列中。這將導致讀取 iserv_addr 陣列中未初始化的資料。

    感謝 John Eckersberg 提供此修復程式。

    自有 ID:OTP-17730

  • erl_uds_dist 分散式模組範例進行了微小的修復。

    自有 ID:OTP-17765 輔助 ID:PR-5289

  • 修復了傳統 TCP socket 調適模組 gen_tcp_socket 的錯誤,當給定檔案描述符時,它確實會繫結到 socket 位址,但不應該這樣做。

    自有 ID:OTP-17793 輔助 ID:PR-5348、OTP-17451、PR-4787、GH-4680、PR-2989、OTP-17216

  • open_port/2 因引數無效而失敗時,改善了錯誤列印輸出。

    自有 ID:OTP-17805 輔助 ID:PR-5406

  • 在已關閉的 socket 上呼叫 socket:monitor/1 應該成功,並產生立即的 DOWN 訊息。這現在已經修復了。

    自有 ID:OTP-17806

  • 修復了組態選項 logger_metadata 以使其正常運作。

    自有 ID:OTP-17807 輔助 ID:PR-5418

  • 修復了 tls 和非 tls 分散式,以使用 erl_epmd:address_please 來判斷連線到遠端節點時應使用 IPv4 還是 IPv6 位址。

    在此修復程式之前,對遠端節點主機名稱的 DNS 查詢決定了要使用的 IP 版本,這表示主機名稱必須解析為有效的 IP 位址。

    自有 ID:OTP-17809 輔助 ID:PR-5337 GH-5334

改進和新功能

  • 新增 logger:reconfigure/0

    自有 ID:OTP-17375 輔助 ID:PR-4663 PR-5186

  • 新增了 socket 裝置控制的 socket 函式 ioctl/2,3,4。

    自有 ID:OTP-17528

  • 新增了對 gen_tcp_socket 和 gen_udp_socket 的 socknames/1 的簡單支援。

    自有 ID:OTP-17531

  • gen_statem 中回調結果類型的類型已擴充為具有 arity 2 類型,其中回調模組可以指定回調資料的類型,因此回調模組可以取得其類型驗證。

    自有 ID:OTP-17738 輔助 ID:PR-4926、OTP-17589

Kernel 8.1.3

已修復的錯誤和故障

  • 已修復內部、未記錄但已使用的模組 inet_dns,以處理 Class 欄位的 mDNS 高位元使用方式。

    由於先前過時、未記錄且未使用的記錄欄位 #dns_rr.func 現在被用作 mDNS 高類別位元的布林標記,因此使用該欄位的程式碼將需要更新。此外,由於已為 mDNS 高類別位元新增了布林欄位 #dns_query.unicast_response,因此使用同樣未記錄的記錄 #dns_query 的程式碼將需要重新編譯。

    * 可能的不相容性 *

    自有 ID:OTP-17734 輔助 ID:GH-5327, OTP-17659

  • 在 OTP-24.1.2 版本中發佈的 PR-5120 中,針對 Linux 重新連線 UDP socket 的行為所做的修正已進一步完善,現在僅在 socket 已經連線的情況下,才會在連線前斷開 socket 的連線,也就是說:僅適用於重新連線。

    這允許程式碼開啟一個使用臨時埠的 socket,取得埠號並進行連線;而不會(在 Linux 上)變更埠號。事實證明,這至少有一個有效的用例(除了測試用例)。

    如果重新連線 socket,那麼埠號可能會變更(在 Linux 上);這是一個已知的怪癖,可以透過在開啟 socket 時繫結到特定的埠號來解決。如果你可以不用臨時埠,那就可以了...

    自有 ID:OTP-17736 輔助 ID:GH-5279, PR-5120, OTP-17559

Kernel 8.1.2

修正的錯誤和故障

  • 未記錄的 DNS 編碼/解碼模組 inet_dns 已被清理,以更一致的方式處理「符號式」和「原始」記錄之間的差異。

    PR-5145/OTP-17584 引入了一項變更,導致了已存在的混淆,此修正應該可以補救。

    自有 ID:OTP-17659 輔助 ID:ERIERL-702

Kernel 8.1.1

修正的錯誤和故障

  • 在監控 socket 時,為 DOWN 訊息新增更多關於 socket「類型」(「socket」或「port」)的資訊。

    自有 ID:OTP-17640

Kernel 8.1

修正的錯誤和故障

  • 下列 BIF 的擴充錯誤資訊已修正和改進:binary_to_existing_atom/2list_to_existing_atom/1erlang:send_after/{3,4}erlang:start_timer/{3,4}

    自有 ID:OTP-17449 輔助 ID:GH-4900

  • 修正了可能導致 net_kernel 程序永遠掛起的罕見錯誤。已觀察到在大量 TLS 連線,同時遠端節點重新啟動時發生此錯誤。此錯誤自 OTP-22.0 版本起存在。

    自有 ID:OTP-17476 輔助 ID:GH-4931, PR-4934

  • 改進了對 inet:info/1 關閉 socket 的處理。

    自有 ID:OTP-17492

  • 此變更修正了在 pull-request #2675 中引入的效能問題。Pull-request #2675 導致系統嘗試啟動已啟動應用程式的子程式,這是沒有必要的。此變更修正了這個效能問題。

    自有 ID:OTP-17519

  • 修正了當模組位於 escript 中時,code:get_doc/1 無法運作的問題。

    自有 ID:OTP-17570 輔助 ID:PR-5139 GH-4256 ERL-1261

  • 原生 DNS 解析器中對結果值的剖析已變得更具防禦性,以防止不正確的結果。

    自有 ID:OTP-17578 輔助 ID:ERIERL-683

  • 修正了傳統 socket 適配器的選項處理中的錯誤,也就是說;當使用 inet_backend = socket 時。現在會在 bind() 呼叫之前設定 socket 選項,因此關於例如位址重複使用的選項會產生預期的效果。

    自有 ID:OTP-17580 輔助 ID:GH-5122

  • 修正了 inet:ntoa/1 不接受無效數值位址的問題。

    自有 ID:OTP-17583 輔助 ID:GH-5136

  • 針對已知類型的記錄,改進了 DNS 記錄的剖析,以防止接受並以原始格式呈現格式錯誤的記錄。

    自有 ID:OTP-17584 輔助 ID:PR-5145

  • 針對 {ip,add_membership}{ip,drop_membership} socket 選項的 ip_mreq() 類型已修正為具有 interface 欄位,而不是錯誤的 address 欄位。

    自有 ID:OTP-17590 輔助 ID:PR-5170

改進和新功能

  • 新增簡單的實用程式函數,以在 erlang shell 中顯示現有的 socket (socket:i/0)。

    自有 ID:OTP-17376 輔助 ID:OTP-17157

  • 現在可以將 gen_udp 設定為使用 socket inet-backend (與 gen_tcp 相同)。

    自有 ID:OTP-17410

  • 為了完整起見,新增了函數 erlang:set_cookie(Cookie)erlang:get_cookie(Node),以方便使用不同的 cookie 設定分散式節點。

    關於分散式 cookie 的文件已改進,以使其不那麼模糊不清。

    自有 ID:OTP-17538 輔助 ID:GH-5063, PR-5111

  • 針對 Linux 的怪異行為實作了因應措施,在連線已連線 (重新連線) 的 UDP socket 時不會調整來源 IP 位址。

    因應措施是在 Linux 上,在連線 UDP socket 之前一律斷開所有連線。

    自有 ID:OTP-17559 輔助 ID:GH-5092, PR-5120

  • 記錄了我們關於不建議使用 file:open/2 開啟 NFS 掛載的檔案、FIFO、裝置和類似檔案的建議。

    自有 ID:OTP-17576 輔助 ID:ERIERL-685

Kernel 8.0.2

修正的錯誤和故障

  • 對於 gen_tcp:connect/3,4,可以指定特定的來源埠,這應該足以在連線之前將 socket 繫結到具有該埠的位址。

    不幸的是,此功能在 OTP-17216 中遺失,該版本強制規定必須指定來源位址才能取得位址繫結,並且如果未指定來源位址,則會忽略指定的來源埠。

    此錯誤現在已修正。

    自有 ID:OTP-17536 輔助 ID:OTP-17216, ERIERL-677

Kernel 8.0.1

修正的錯誤和故障

  • 修正了 Global 中的競爭情況。

    自有 ID:OTP-16033 輔助 ID:ERIERL-329, ERL-1414, GH-4448, ERL-885, GH-3923

  • 在節點透過 init:restart/0,1 重新啟動之後,模組 socket 無法使用,因為支援的表格已清除且未重新初始化。此問題現在已修正。

    將「.」網域作為搜尋網域的處理不正確,並導致 DNS 解析器 inet_res 發生當機,此問題現在已修正。

    自有 ID:OTP-17439 輔助 ID:GH-4827, PR-4888, GH-4838

  • 修正了 fd 選項和繫結到位址的組合的處理,特別是對於 local 位址系列。

    自有 ID:OTP-17451 輔助 ID:OTP-17374

  • 針對新的 socket 實作的錯誤修正和程式碼清理,例如

    已在 NIF 程式碼中適當的地方,新增關於取消監控結果的斷言。

    已審查 NIF 程式碼中 socket 關閉的內部狀態處理。

    已移除 NIF 程式碼中針對 EINTR 迴圈執行 close() 的行為,因為在 Linux 上強烈建議不要這樣做,並且 Posix 也沒有清楚說明是否允許這樣做。

    已記錄舊版 gen_tcp socket 的 inet_backend 臨時 socket 選項。

    修正了 net:getaddrinfo/2 的傳回值:protocol 欄位現在是 atom/0,而不是錯誤的 list(atom())。文件也已修正此傳回類型。

    已修正延遲關閉 socket:sendfile/* 檔案的問題。

    已修正 socket NIF 中的一些偵錯程式碼 (預設為未啟用),以防止因或多或少無害的事件的偵錯列印而意外核心傾印。

    自有 ID:OTP-17452

Kernel 8.0

修正的錯誤和故障

  • 修正了內部 inet_res 解析器快取的錯誤,該快取錯誤地處理了解析器組態檔的狀態計時器,並因許多不必要的檔案系統存取而導致效能問題。

    自有 ID:OTP-14700 輔助 ID:PR-2848

  • disk_log:info/1 傳回的標籤 head 的值,從 {ok, Head} 變更為僅 Head

    * 可能的不相容性 *

    自有 ID:OTP-16809 輔助 ID:ERL-1313

  • 已將兩個選項新增至 erl_call-fetch_stdout 選項會擷取由 erl_call 呼叫的程式碼產生的 stdout 資料。-fetch_stdout 選項會停用結果項的列印。為了實作這兩個選項中的第一個選項,已將名為 ei_xrpc_from 的新函數新增至 erl_interface。如需詳細資訊,請參閱 erl_call 文件和 erl_interface 文件。

    自有 ID:OTP-17132

  • 已將遺失的執行階段相依性新增至此應用程式。

    自有 ID:OTP-17243 輔助 ID:PR-4557

  • 修正了 inet:get_rc/0,使其將主機項目以單獨的項目傳回,而不是錯誤地在清單內的清單中傳回。此錯誤是由 OTP-23.0-rc1 中的 OTP-16487 引入的。

    自有 ID:OTP-17262 輔助 ID:GH-4588, PR-4604, OTP-16487

  • gen_tcp:option_name() 類型具有重複的 pktoptions 值。

    自有 ID:OTP-17277

  • 修正了從 pg 中的內部狀態移除空群組的問題。

    自有 ID:OTP-17286 輔助 ID:PR-4619

  • 現在 erl -remsh 在無法連線到遠端節點時,會印出錯誤訊息。

    自有 ID:OTP-17287 輔助 ID:PR-4581

  • 修正了與損毀的 shell 歷程記錄檔相關的錯誤。

    現在 shell 歷程記錄印出的錯誤訊息會記錄為記錄器錯誤報告,而不是寫入標準錯誤。

    自有 ID:OTP-17288 輔助 ID:PR-4581

  • 現在,當給予 -name-sname 過多的引數時,會發出記錄器警告。範例:erl -name a b

    自有 ID:OTP-17315 輔助 ID:GH-4626

  • 現在,inet_res 使用的快取可以再次處理每個網域名稱的多個 IP 位址,並因此修正了 PR-3041 (OTP-13126) 和 PR-2891 (OTP-14485) 中引入的錯誤。

    自有 ID:OTP-17344 輔助 ID:PR-4633, GH-4631, OTP-14485, OTP-12136

  • 使用 socket:accept 建立的 socket 未計數 (socket:info/0)。

    自有 ID:OTP-17372

  • 針對 gen_tcp:listen/2{fd, Fd} 選項不適用於 inet_backend socket,此問題已修正。

    自有 ID:OTP-17374 輔助 ID:PR-4787, GH-4680, PR-2989, OTP-17216

改進和新功能

  • 已改進 DNS 解析器 inet_res 使用的快取,以使用 ETS 查詢,而不是伺服器呼叫。這對於快取命中是顯著的速度改進。

    自有 ID:OTP-13126 輔助 ID:PR-3041

  • 內部 DNS 解析器 inet_res 的快取 ETS 表格類型已變更類型(在內部),以獲得更好的速度和原子性。

    自有 ID:OTP-14485 輔助 ID:PR-2891

  • 實驗性 socket 模組現在可以使用作業系統支援的任何協定 (依名稱)。在 PR-2641 中建議,在 PR-2670 中實作。

    自有 ID:OTP-14601 輔助 ID:PR-2641, PR-2670, OTP-16749

  • DNS 解析器 inet_res 已更新,支援 CAA (RFC 6844) 和 URI (RFC 7553) 記錄。

    Own Id: OTP-16517 Aux Id: PR-2827

  • 已實作 gen_tcp 的相容性轉接器,以使用新的 socket API (gen_tcp_socket)。當設定核心應用程式變數 inet_backend = socket 時會使用此轉接器。

    Own Id: OTP-16611 Aux Id: OTP-16749

  • 已實作 EEP 54 中提議的失敗 BIF 呼叫的擴充錯誤資訊。

    當從 Erlang shell 呼叫 BIF 失敗時,將會印出更多關於哪個或哪些參數發生錯誤的資訊。當 BIF 呼叫失敗時,proc_libcommon_testqlc 也會使用相同的擴充錯誤資訊。

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

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

    Own Id: OTP-16686

  • 現在可以使用 raw 選項,在 file:delete/1,2 中繞過檔案伺服器。

    Own Id: OTP-16698 Aux Id: PR-2634

  • 已引入使用分佈式處理程序的 UDS 上 Erlang 分佈的範例實作。

    感謝 Jérôme de Bretagne

    Own Id: OTP-16703 Aux Id: PR-2620

  • 已引入 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()

    Own Id: OTP-16718 Aux Id: PR-2735

  • 實驗性的新 socket API 已進一步開發。已對 OTP 23 進行一些向後不相容的變更。

    控制訊息格式已變更,因此解碼的值現在位於 'value' 欄位中,而不是位於 'data' 欄位中。 'data' 欄位現在始終包含二進位資料。

    已針對訊息標頭和控制訊息標頭變更了一些類型名稱。

    socket:bind/2 現在會回傳純 ok,而不是 {ok, Port},後者僅與 inetinet6 位址系列相關,且通常並不重要。若要找出選擇了哪個連接埠,請使用 socket:sockname/1

    * 可能的不相容性 *

    Own Id: OTP-16749 Aux Id: OTP-14601

  • 新函式 os:env/0 會以 2 元組列表的形式回傳所有 OS 環境變數。

    Own Id: OTP-16793 Aux Id: ERL-1332, PR-2740

  • 移除對分散式磁碟日誌的支援。應使用新函式 disk_log:all/0,而不是 disk_log:accessible_logs/0。應使用函式 disk_log:close/1,而不是 disk_log:lclose/1,2

    * 可能的不相容性 *

    Own Id: OTP-16811

  • 擴充 erl_epmd:listen_port_please/2 的規格以反映 erl_epmd:port_please/2

    Own Id: OTP-16947 Aux Id: PR-2781

  • 已新增一個新的 erl 參數,用於指定具有組態資料的檔案描述元。這使得在執行 erl 命令時,可以傳遞參數 "-configfd FD"。當提供此選項時,系統會嘗試從檔案描述元讀取和剖析組態參數。

    Own Id: OTP-16952

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

    * 可能的不相容性 *

    Own Id: OTP-16963

  • 已移除 pg2 模組。

    * 可能的不相容性 *

    Own Id: OTP-16968

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

    Own Id: OTP-17005 Aux Id: OTP-16718

  • 允許 utf-8 二進位檔作為 logger_formatter 範本的一部分。

    Own Id: OTP-17015

  • 如果首次開啟包裝日誌,則讓 disk_log:open/1 變更大小,也就是說,如果磁碟日誌處理程序不存在,且選項 size 的值與磁碟日誌的目前大小不符。

    * 可能的不相容性 *

    Own Id: OTP-17062 Aux Id: ERL-1418, GH-4469, ERIERL-537

  • 允許使用自訂回呼模組擷取和儲存 erlang 節點的 shell 歷程記錄。如需更多詳細資訊,請參閱 核心文件中的 shell_history 組態參數。

    Own Id: OTP-17103 Aux Id: PR-2949

  • 已改進簡單記錄器(用於記錄在核心啟動之前發生的事件),以印出更美觀的錯誤訊息。

    Own Id: OTP-17106 Aux Id: PR-2885

  • 已針對支援基礎 socket 程式庫呼叫的平台實作 socket:sendfile/2,3,4,5

    Own Id: OTP-17154 Aux Id: OTP-16749

  • 為所有類型的 socket 新增 socket 監控器。

    Own Id: OTP-17155

  • 修正 gen_tcp_socket 的各種問題。包括記錄一些不相容性。

    * 可能的不相容性 *

    Own Id: OTP-17156

  • inet:i/0 現在也顯示現有的 gen_tcp 相容性 socket(基於 'socket')。

    Own Id: OTP-17157

  • 在記錄器中新增了設定主要中繼資料的支援。主要中繼資料會作為系統中所有日誌事件的基本中繼資料傳遞。如需更多詳細資訊,請參閱核心使用者指南的記錄器章節中的 中繼資料

    Own Id: OTP-17181 Aux Id: PR-2457

  • 識別應用程式資源檔案中的新索引鍵 'optional_applications'。

    Own Id: OTP-17189 Aux Id: PR-2675

  • 傳遞至 logger:log/2,3,4 的 Fun 現在可以傳回僅在需要時才會擷取的中繼資料。如需更多詳細資訊,請參閱 logger:log/2,3,4

    Own Id: OTP-17198 Aux Id: PR-2721

  • 已重寫 erpc:multicall(),使其能夠利用新引入和改良的選擇性接收最佳化。

    Own Id: OTP-17201 Aux Id: PR-4534

  • 新增實用函式 inet:info/1 以提供有關 socket 的各種資訊。

    Own Id: OTP-17203 Aux Id: OTP-17156

  • 已變更 gen_tcp:connect/3,4 的行為,使其預設不繫結至位址,這允許網路堆疊延遲位址和連接埠選擇到知道遠端位址時。這樣可以更好地重複使用連接埠,從而啟用更多輸出連線,因為暫時連接埠範圍不再是硬性限制。

    從理論上來說,此行為變更可能會影響可能的錯誤值集,或對某些平台產生其他小的影響。

    * 可能的不相容性 *

    Own Id: OTP-17216 Aux Id: PR-2989

  • 已在 DNS 解析器 inet_res 中實作選項 {nxdomain_reply, boolean()}。這很有用,因為來自名稱伺服器的 nxdomain 錯誤確實包含 SOA 記錄(如果網域存在)。此記錄有助於決定失敗項目的負快取 TTL。

    Own Id: OTP-17266 Aux Id: PR-4564

  • 最佳化 pg 中屬於群組的本機處理程序的查閱。

    Own Id: OTP-17284 Aux Id: PR-4615

  • 已變更模組 socket 函式 send()sendto()sendmsg()sendfile()recv() 的傳回值,當傳回 SelectInfo 時,會傳回使用 select 標記的元組,而不是有時使用 ok 標記。

    這是一個向後不相容的變更,可以改善使用非同步操作的程式碼可用性。

    * 可能的不相容性 *

    Own Id: OTP-17355 Aux Id: OTP-17154

  • 修正程式碼中符合底線前置變數的警告。

    Own Id: OTP-17385 Aux Id: OTP-17123

核心 7.3.1.7

改進和新功能

  • 引入了一個新的函式 global:disconnect/0,可以使用該函式將節點從 global 節點叢集中乾淨地斷開連接。

    自有 ID:OTP-18232 輔助 ID:OTP-17843, PR-6264

核心 7.3.1.6

已修正錯誤和故障

  • 在建立連線的同時呼叫 net_kernel:setopts(new, Opts) 可能會導致 net_kernel 進程和建立連線的進程之間發生死鎖。

    自有 ID:OTP-18198 輔助 ID:GH-6129, PR-6216

核心 7.3.1.5

已修正錯誤和故障

  • 預設情況下,當網路問題導致連線遺失時,global 不會採取任何動作來還原完全連線的網路。對於所有期望提供完全連線網路的應用程式來說,這是有問題的,例如 mnesia,以及 global 本身。重疊分割區的網路可能會導致 global 的內部狀態變得不一致。即使在這些分割區重新組合形成完全連線的網路之後,這種不一致仍然可能存在。對期望維護完全連線網路的其他應用程式的影響可能有所不同,但它們在這種分割期間可能會以非常微妙且難以偵測的方式發生錯誤。

    為了防止此類問題,我們引入了一個防止重疊分割區的修復程式,可以使用 prevent_overlapping_partitions kernel(6) 參數啟用。啟用此修復程式後,global 將主動從報告遺失與其他節點連線的節點斷開連線。這將導致形成完全連線的分割區,而不是將網路留在具有重疊分割區的狀態。請注意,此修復程式必須在網路中的所有節點上啟用才能正常運作。由於這相當大地改變了行為,因此目前預設情況下會停用此修復程式。但是,由於您可能會在沒有此修復程式的情況下遇到難以偵測的問題,因此強烈建議您啟用此修復程式,以避免出現上述問題。從 OTP 25 開始,此修復程式將預設為啟用。

    自有 ID:OTP-17843 輔助 ID:ERIERL-732、PR-5611

  • 修復了先前來自相同節點的已建立連線靜默關閉後,接受連線設定失敗的問題。

    自有 ID:OTP-17979 輔助 ID:ERIERL-780

改進和新功能

核心 7.3.1.4

已修正錯誤和故障

  • 原生 DNS 解析器中對結果值的剖析已變得更具防禦性,以防止不正確的結果。

    自有 ID:OTP-17578 輔助 ID:ERIERL-683

核心 7.3.1.3

已修正錯誤和故障

  • 修正了當模組位於 escript 中時,code:get_doc/1 無法運作的問題。

    自有 ID:OTP-17570 輔助 ID:PR-5139 GH-4256 ERL-1261

核心 7.3.1.2

已修正錯誤和故障

  • 將「.」網域作為搜尋網域的處理不正確,並導致 DNS 解析器 inet_res 發生當機,此問題現在已修正。

    Own Id: OTP-17473 Aux Id: GH-4838, OTP-17439

  • 修正了可能導致 net_kernel 程序永遠掛起的罕見錯誤。已觀察到在大量 TLS 連線,同時遠端節點重新啟動時發生此錯誤。此錯誤自 OTP-22.0 版本起存在。

    自有 ID:OTP-17476 輔助 ID:GH-4931, PR-4934

核心 7.3.1.1

已修正錯誤和故障

  • 修正了 Global 中的競爭情況。

    自有 ID:OTP-16033 輔助 ID:ERIERL-329, ERL-1414, GH-4448, ERL-885, GH-3923

核心 7.3.1

已修正錯誤和故障

  • 修復了 Erlang DNS 解析器中的一個錯誤,當從 DNS 伺服器收到不正確的回應(針對 IN CNAME 查詢收到 IN A 回應)並在未驗證其類型的情況下使用回應記錄的值時,可能會導致核心監督程式崩潰,進而導致整個節點崩潰。

    自有 ID:OTP-17361

Kernel 7.3

已修正的錯誤和故障

  • DNS 編碼中壓縮指標的範圍檢查存在錯誤,這導致非常大的 DNS 訊息(大於約 16 KB,例如 AXFR 回應)產生不正確的標籤壓縮編碼。這個超過 11 年的錯誤現已修正。

    自有 ID:OTP-13641 輔助 ID:PR-2959

  • 修正 erpc 文件中的內部連結。

    自有 ID:OTP-17202 輔助 ID:PR-4516

  • 修復了複雜的 seq_trace 令牌(即列表、元組、映射等)可能會被 GC 損壞的錯誤。此錯誤是在 OTP-21 中引入的。

    自有 ID:OTP-17209 輔助 ID:PR-3039

  • 當在 modules 模式下執行 Xref 時,除錯器應用程式會顯示為核心應用程式的依賴項。

    自有 ID:OTP-17223 輔助 ID:GH-4546, PR-4554

改進和新功能

  • erl_epmd(epmd 客戶端)現在會在連線斷開時嘗試重新連線至本機 EPMD。

    自有 ID:OTP-17178 輔助 ID:PR-3003

Kernel 7.2.1

已修正的錯誤和故障

  • 當使用 DNS 解析器選項 servfail_retry_timeout 時,它不會遵守總體呼叫逾時,例如在 inet_res:getbyname/3 中。此行為異常現已修正。此外,servfail_retry_timeout 行為已改進為僅針對給出 servfail 回應的伺服器強制執行。

    自有 ID:OTP-12960 輔助 ID:ERIERL-598, PR-4509

Kernel 7.2

已修正的錯誤和故障

  • logger.hrl 中的 apply 呼叫現在會使用 erlang 前綴呼叫,以避免與本機 apply/3 函數發生衝突。

    自有 ID:OTP-16976 輔助 ID:PR-2807

  • 修正 pg 中的記憶體洩漏問題。

    自有 ID:OTP-17034 輔助 ID:PR-2866

  • 修正 logger_proxy 中由於未處理的 stray gen_server:call 回覆而發生的崩潰問題。當記錄器在高負載下且流量控制機制達到其限制時,會出現 stray 回覆。

    自有 ID:OTP-17038

  • 修復了 erl_epmd:names() 中的一個錯誤,該錯誤導致它傳回非法傳回值 noport 而不是 {error, Reason},其中 Reason 是實際的錯誤原因。此錯誤也傳播到 net_adm:names()

    此錯誤是在 kernel 版本 7.1 (OTP 23.1) 中引入的。

    自有 ID:OTP-17054 輔助 ID:ERL-1424

改進和新功能

  • 新增一些解析器已記錄類型的匯出。

    自有 ID:OTP-16954 輔助 ID:ERIERL-544

  • 為解析器查詢新增可設定的重試逾時。

    自有 ID:OTP-16956 輔助 ID:ERIERL-547

  • gen_server:multi_call() 在僅使用設為 infinity 的逾時呼叫本機節點的特殊情況下已最佳化。

    自有 ID:OTP-17058 輔助 ID:PR-2887

Kernel 7.1

已修正的錯誤和故障

  • 當使用 inet_backend socket 時,已針對 file:sendfile 實作了回退。

    自有 ID:OTP-15187 輔助 ID:ERL-1293

  • 使預設 TCP 分散尊重 inet_dist_listen_options 中的 backlog 選項。

    自有 ID:OTP-16694 輔助 ID:PR-2625

  • 實驗性 gen_tcp_socket 後端的原始選項處理已損壞,因此所有原始選項都被忽略了,例如 gen_tcp:listen/2,這個錯誤現在已修正。由 Jan Uhlig 回報。

    自有 ID:OTP-16743 輔助 ID:ERL-1287

  • 使用 inet-backend socket 時,Accept 失敗。

    自有 ID:OTP-16748 輔助 ID:ERL-1284

  • 修正了 gen_tcp socket 後端中的各種次要錯誤。

    自有 ID:OTP-16754

  • 更正 disk_log:truncate/1 以計算標頭。並更正文件,說明 disk_log:truncate/1 可以與外部磁碟記錄檔搭配使用。

    自有 ID:OTP-16768 輔助 ID:ERL-1312

  • 修正 erl_epmd:port_please/2,3 類型規範以包含所有可能的錯誤值。

    自有 ID:OTP-16783

  • 修正 erl -erl_epmd_port 以使其正常運作。在此修正之前,它完全無法運作。

    自有 ID:OTP-16785

  • 修正內部函數 erlang:seq_trace_info/1 的類型規範,以允許 term/0 作為傳回的標籤。這反過來又修復了對 seq_trace:get_token/1 的呼叫可以由 dialyzer 正確分析的問題。

    自有 ID:OTP-16823 輔助 ID:PR-2722

  • 修復當動態啟動分散時,pg 中處理程序重複註冊錯誤。

    自有 ID:OTP-16832 輔助 ID:PR-2738

改進和新功能

  • 使 socket 登錄檔(使用)為可選(預設仍為啟用)。現在可以使用關閉的 socket 登錄檔來建置 OTP,透過設定環境變數來關閉它,並在執行階段(透過建立 socket 時的函數呼叫和引數)來控制它。

    自有 ID:OTP-16763

  • erl -remsh nodename 在與動態節點名稱一起使用時,不再需要提供主機名稱。

    自有 ID:OTP-16784

Kernel 7.0

已修正的錯誤和故障

  • 修正當啟用 shell_history 時,關機期間的競爭條件。競爭條件會觸發 disk_log 中的崩潰。

    自有 ID:OTP-16008 輔助 ID:PR-2302

  • 修正了 Erlang 分散以處理節點連線時可以處理訊息分散但無法處理 atom 快取的狀況。此錯誤僅影響已實作自訂分散載體的用戶。它自 OTP-21 以來一直存在。

    DFLAG_FRAGMENT 分散標誌新增至分散實作可以拒絕的標誌集合。

    自有 ID:OTP-16284

  • 修正了二進位不允許作為 logger:log 呼叫中的格式字串的錯誤。

    自有 ID:OTP-16395 輔助 ID:PR-2444

  • 修正了當嘗試記錄處理程序或格式器的崩潰時,logger 會陷入無限迴圈的錯誤。

    自有 ID:OTP-16489 輔助 ID:ERL-1134

  • code:lib_dir/1 已修正為也傳回 erts 的 lib 目錄。

    對於任何依賴 {error,bad_name} 作為 erts 傳回值的應用程式,這已被標記為不相容。

    * 可能的不相容性 *

    自有 ID:OTP-16502

  • 如果應用程式的主應用程式終止,則不會呼叫應用程式 stop/1 回呼。

    自有 ID:OTP-16504 輔助 ID:PR-2328

  • 修正了 application:loaded_applications/0 中的一個錯誤,如果例如同時執行升級/降級,可能會導致它失敗並出現 badarg

    自有 ID:OTP-16627 輔助 ID:PR-2601

改進和新功能

  • kernel 應用程式中引入了一個新的模組 erpcerpc 模組實作了 rpc 模組所提供操作的增強子集。增強的意義在於它可以區分傳回值、引發的例外和其他錯誤。erpc 也比原始 rpc 實作具有更好的效能和可擴展性。這是透過利用新引入的 spawn_request() BIF 來實現的。當可能時,rpc 模組也會透過利用 erpc 從這些改進中獲益。

    此變更已被標記為潛在的不相容性,因為 rpc:block_call() 現在僅保證會封鎖其他 block_call() 操作。文件先前聲稱它會封鎖所有 rpc 操作。然而,從來都不是這種情況。它先前不會封鎖節點本機 block_call() 操作。

    * 可能的不相容性 *

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

  • 客戶端節點可以從其首次連線的節點動態接收其節點名稱。此功能可透過

    • 使用 erl -sname undefined 開始
    • erl_interface 函數 ei_connect_init 及其相關函數
    • erl_call -R

    自有 ID:OTP-13812

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

    改善了 chars_limitdepthproc_lib 中以及格式化例外時的處理。

    自有 ID:OTP-15299

  • 移除舊版 I/O 協定的請求之使用方式和文件。

    自有 ID:OTP-15695

  • 現在當傳遞 directory 選項時,可以使用 file:open/2 開啟目錄。

    自有 ID:OTP-15835,輔助 ID:PR-2212

  • logger 中基於記錄層級來檢查是否要記錄的機制已最佳化,透過使用 persistent_term 來儲存記錄層級。

    自有 ID:OTP-15948,輔助 ID:PR-2356

  • 現在可以在已開啟的檔案和目錄上使用 file:read_file_info/2

    自有 ID:OTP-15956,輔助 ID:PR-2231

  • 現在 erl-config 選項可以接受多個設定檔,而無需重複使用 -config 選項。範例:

    erl -config sys local

    自有 ID:OTP-16148,輔助 ID:PR-2373

  • 改善節點連線設定的交握協定。現在可以協商協定版本,而無需依賴 epmd 或事先了解對等節點版本。此外,還增加了節點化身(「建立」)值的交換,並將分佈能力標誌欄位從 32 位元擴展到 64 位元。

    自有 ID:OTP-16229

  • 擴展了在不依賴 EPMD 的情況下執行 Erlang 分佈的可能性。為了實現這一點,已向 inet 分佈新增了幾個新選項。

    • -dist_listen false - 設定分佈通道,但不監聽連入連線。當您想使用當前節點與同一機器上的另一個節點互動,而無需讓其加入整個叢集時,這非常有用。

    • -erl_epmd_port Port - 設定內建 EPMD 用戶端應傳回的預設埠。這允許本機節點知道要連線到叢集中任何其他節點的埠。

    也擴展了 erl_epmd 回呼 API,允許傳回 -1 作為建立,這表示節點將建立隨機建立。

    此外,還新增了一個名為 listen_port_please 的新回呼函式,允許回呼傳回分佈應使用的監聽埠。如果要從外部服務取得監聽埠,則可以使用此函數來取代 inet_dist_listen_min/max

    自有 ID:OTP-16250

  • 已實作第一個實驗性模組,作為 gen_tcpinetsocket 後端。其他模組也將陸續推出。歡迎提供意見反應。

    自有 ID:OTP-16260,輔助 ID:OTP-15403

  • 新的實驗性 socket 模組已移至 Kernel 應用程式。

    自有 ID:OTP-16312

  • 取代 group 模組中已棄用的函式之使用方式。

    自有 ID:OTP-16345

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

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

  • 更新了循序追蹤,以支援除了訊息傳遞以外的其他資訊傳輸。

    自有 ID:OTP-16370,輔助 ID:OTP-15251、OTP-15232

  • code:module_status/1 現在接受模組清單。code:module_status/0 已新增,此函數會傳回所有已載入模組的狀態。

    自有 ID:OTP-16402

  • 當雙星號 (**) 是模式的一部分時,filelib:wildcard/1,2 現在的速度是之前的兩倍。

    自有 ID:OTP-16419

  • 已導入新的分散式命名程序群組實作。此實作可在 pg 模組中使用。

    請注意,此 pg 模組僅與 OTP 17 之前在 stdlib 中存在的實驗性 pg 模組名稱相同。

    感謝 Maxim Fedorov 的實作。

    自有 ID:OTP-16453,輔助 ID:PR-2524

  • pg2 模組已被棄用。也已排定在 OTP 24 中移除。

    建議您使用新導入的 pg 模組來取代 pg2 的使用。pg 具有類似的 API,但實作方式更具擴充性。

    * 可能的不相容性 *

    自有 ID:OTP-16455

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

    自有 ID:OTP-16469

  • 當主機檔案變更時,內部主機檔案解析器快取 inet_hosts 已重新編寫以更好地運作。例如,快取會按條目更新,而不是清除和重新載入,因此在重新載入期間查閱不會暫時失敗;當多個程序同時請求重新載入時,現在會將這些合併為一個,而不是全部依序完成。由 Maxim Fedorov 回報並提出第一個解決方案建議。

    自有 ID:OTP-16487,輔助 ID:PR-2516

  • 新增 code:all_available/0,可用於取得所有可用的模組。

    自有 ID:OTP-16494

  • 從 OTP 23 開始,分散式 disk_log 功能已被棄用。也已排定在 OTP 24 中移除。

    * 可能的不相容性 *

    自有 ID:OTP-16495

  • 新增函式 code:fetch_docs/1,用於取得 Erlang 模組的內嵌文件。

    自有 ID:OTP-16499

  • 改善 net nif 的設定,這應可提高可移植性。

    自有 ID:OTP-16530,輔助 ID:OTP-16464

  • socket:socket 計數器和 socket 全域計數器現在以 map (而非屬性清單) 表示。

    自有 ID:OTP-16535

  • 已移除實驗性 socket 模組的限制,因此現在 'seqpacket' socket 類型應適用於作業系統支援的任何通訊網域 (協定系列),通常是 Unix Domain。

    自有 ID:OTP-16550,輔助 ID:ERIERL-476

  • 允許在 logger_std_h 中使用自訂 IO 裝置。

    自有 ID:OTP-16563,輔助 ID:PR-2523

  • 新增 file:del_dir_r/1,此函數會刪除目錄及其所有內容,類似於 Unix 系統上的 rm -rf

    自有 ID:OTP-16570,輔助 ID:PR-2565

  • socket:預設情況下,socket 選項 rcvtimeo 和 sndtimeo 現在已停用。若要啟用這些選項,現在必須使用設定選項 --enable-esock-rcvsndtimeo 來建置 OTP

    自有 ID:OTP-16620

  • 使用 socket 模組的實驗性 gen_tcp 相容性程式碼在接收指定位元組數時可能會遺失緩衝資料。此錯誤已修正。由 Maksim Lapshin 在 bugs.erlang.org ERL-1234 上回報

    自有 ID:OTP-16632,輔助 ID:ERL-1234

Kernel 6.5.2.5

已修正錯誤和故障

  • 預設情況下,當網路問題導致連線遺失時,global 不會採取任何動作來還原完全連線的網路。對於所有期望提供完全連線網路的應用程式來說,這是有問題的,例如 mnesia,以及 global 本身。重疊分割區的網路可能會導致 global 的內部狀態變得不一致。即使在這些分割區重新組合形成完全連線的網路之後,這種不一致仍然可能存在。對期望維護完全連線網路的其他應用程式的影響可能有所不同,但它們在這種分割期間可能會以非常微妙且難以偵測的方式發生錯誤。

    為了防止此類問題,我們導入了「防止重疊分割」修復,可以使用 prevent_overlapping_partitions kernel(6) 參數來啟用此修復。啟用此修復後,global 會主動與回報已遺失與其他節點連線的節點中斷連線。這會導致形成完全連線的分割,而不是讓網路處於重疊分割的狀態。請注意,必須在網路中的所有節點上啟用此修復,才能正常運作。由於這會大幅變更行為,因此此修復目前預設為停用。由於在沒有此修復的情況下,您可能會遇到難以偵測的問題,因此強烈建議您啟用此修復,以避免發生上述問題。從 OTP 25 開始,此修復將預設為啟用。

    自有 ID:OTP-17843 輔助 ID:ERIERL-732、PR-5611

改善和新功能

  • 已導入 net_tickintensity kernel 參數。此參數可用於控制 net_ticktime 期間的勾號數量。

    為了更容易新增新選項,還引入了新的 net_kernel:start/2 函式。已棄用 net_kernel:start/1 的使用。

    自有 ID:OTP-17905 輔助 ID:ERIERL-732、PR-5740

Kernel 6.5.2.4

已修正錯誤和故障

  • 修正了可能導致 net_kernel 程序永遠掛起的罕見錯誤。已觀察到在大量 TLS 連線,同時遠端節點重新啟動時發生此錯誤。此錯誤自 OTP-22.0 版本起存在。

    自有 ID:OTP-17476 輔助 ID:GH-4931, PR-4934

Kernel 6.5.2.3

已修正錯誤和故障

  • 修正了 Global 中的競爭情況。

    自有 ID:OTP-16033 輔助 ID:ERIERL-329, ERL-1414, GH-4448, ERL-885, GH-3923

Kernel 6.5.2.2

已修正錯誤和故障

  • 當在 modules 模式下執行 Xref 時,除錯器應用程式會顯示為核心應用程式的依賴項。

    自有 ID:OTP-17223 輔助 ID:GH-4546, PR-4554

Kernel 6.5.2.1

已修正錯誤和故障

  • 修正了 application:loaded_applications/0 中的一個錯誤,如果例如同時執行升級/降級,可能會導致它失敗並出現 badarg

    自有 ID:OTP-16627 輔助 ID:PR-2601

Kernel 6.5.2

已修正錯誤和故障

  • 已修正 DNS 解析器 `inet_res` 在後續請求逾時時傳回最後一個中間錯誤的問題。

    自有 ID:OTP-16414,輔助 ID:ERIERL-452

  • prim_net nif (net/kernel) 使用了未定義的原子 notsup。現在已修正此問題。

    自有 ID:OTP-16440

  • 修正了在早期啟動期間嘗試記錄載入檔案時發生的當機。

    自有 ID:OTP-16491

  • 修正了在啟動期間記錄到遠端節點時記錄器當機的問題。

    自有 ID:OTP-16493,輔助 ID:ERIERL-459

改善和新功能

  • 改善了 net_kernel 的偵錯功能。

    自有 ID:OTP-16458,輔助 ID:PR-2525

Kernel 6.5.1

已修正錯誤和故障

  • 已改善由 inet info 函式提供的「socket 狀態」資訊

    自有 ID:OTP-16043,輔助 ID:ERL-1036

  • 修正了當需要旋轉和壓縮非常大的記錄檔時,logger 會在啟動時當機的問題。

    自有 ID:OTP-16145,輔助 ID:ERL-1034

  • 修正了導致 net_kernel:monitor_nodes(true, [nodedown_reason]) 回報的實際節點關閉原因遺失,並被原因 killed 取代的問題。

    自有 ID:OTP-16216

  • 已更新 rpc:call/4,5/ 的文件,說明當呼叫的函式擲回或傳回 'EXIT' tuple 時會發生什麼情況。

    自有 ID:OTP-16279,輔助 ID:ERL-1066

Kernel 6.5

已修正錯誤和故障

  • 已修正 gen_sctp:connect/4,5 的類型規格。

    自有 ID:OTP-15344,輔助 ID:ERL-947

  • 傳遞給 erl 的額外 -mode 旗標會被忽略,並顯示警告。

    自有 ID:OTP-15852

  • 修正 seq_trace:set_token/2 的類型規格。

    自有 ID:OTP-15858,輔助 ID:ERL-700

  • 如果給予 allnone 作為任何參數,logger:compare_levels/2 會因為 badarg 例外狀況而失敗。現在已修正此問題。

    自有 ID:OTP-15942,輔助 ID:PR-2301

  • 修正了當檔案的 inode 變更時,logger_std_h 中的日誌檔案不會被關閉的錯誤。這反過來會導致在使用 logrotate 等工具時發生檔案描述符洩漏。

    自有 ID:OTP-15997 輔助 ID:PR-2331

  • 修正了除錯函數 net_kernel:nodes_info/0 中的競爭條件。

    自有 ID:OTP-16022

  • 修正了在 compresseddelayed_write 模式下開啟檔案時關閉檔案的競爭條件。

    自有 ID:OTP-16023

改進與新功能

  • 已在 gen_udp:send/4,5 中新增傳送輔助資料(尤其是 TOS 欄位)的功能。

    自有 ID:OTP-15747 輔助 ID:ERIERL-294

  • 如果日誌檔案是以相對路徑給定,標準日誌處理程式 (logger_std_h) 會以相對路徑儲存檔案名稱。如果節點的目前目錄稍後變更,則會相對於新的目前目錄建立一個新檔案,如果新目錄不存在,可能會導致 enoent 錯誤。現在已修正此問題,logger_std_h 一律會將日誌檔案名稱儲存為絕對路徑,該路徑是在處理程式啟動時從目前目錄計算而來。

    自有 ID:OTP-15850

  • 支援使用 inet:i/0 的本地 Socket。

    自有 ID:OTP-15935 輔助 ID:PR-2299

Kernel 6.4.1

修正的錯誤與故障

  • user/user_drv 可以在處理之前回應用戶 IO 請求,如果模擬器在呼叫 io:format/2 後不久停止(例如在 escript 中),可能會導致資料遺失。

    自有 ID:OTP-15805

Kernel 6.4

修正的錯誤與故障

  • 修正當向 erl 提供多個 -sname-name 時,會選擇第一個。在此修正之前,當提供多個名稱選項時,根本不會啟動分佈。

    自有 ID:OTP-15786 輔助 ID:ERL-918

  • 修正指向不存在的檔案的 inet_res 設定,使其再次正常運作。此問題在 KERNEL-6.3 (OTP-21.3) 中損壞。

    自有 ID:OTP-15806

改進與新功能

  • 透過 socket 模組提供簡單的 Socket API。這是一個低階 API,不會取代 gen_[tcp|udp|sctp]。它旨在最終取代 inet 驅動程式,但不會取代高階 gen 模組(gen_tcp、gen_udp 和 gen_sctp)。它還提供了一個基本的 API,有助於實作其他協定(即 TCP、UDP 和 SCTP)。

    已知問題是:不支援 Windows 作業系統(目前)。

    自有 ID:OTP-14831

  • 改進了 linger 選項的說明文件。

    自有 ID:OTP-15491 輔助 ID:PR-2019

  • Global 在連線到其他節點時,不再嘗試多次。

    自有 ID:OTP-15607 輔助 ID:ERIERL-280

  • dist 訊息 EXIT、EXIT2 和 MONITOR_DOWN 已更新為新版本,這些版本會將原因詞作為訊息酬載的一部分傳送,而不是作為控制訊息的一部分。

    舊版本仍然存在,並且可以在與不支援新版本的節點通訊時使用。

    自有 ID:OTP-15611

  • 新增核心設定參數 start_distribution = boolean()。如果設定為 false,系統將在停用所有分佈功能的情況下啟動。預設值為 true

    自有 ID:OTP-15668 輔助 ID:PR-2088

  • 在 OTP-21.3 中,針對設定中重複的應用程式/金鑰引入了警告。當設定在系統啟動時作為檔案給定,以及在執行期間透過 application:set_env/1,2 給定時,都會顯示此警告。

    現在,application:set_env/1,2 中的警告已變更為 badarg 例外。如果系統啟動時在設定檔中給定錯誤的設定,啟動將會失敗。

    * 可能的不相容性 *

    自有 ID:OTP-15692 輔助 ID:PR-2170

Kernel 6.3.1.3

修正的錯誤與故障

  • 修正了當檔案的 inode 變更時,logger_std_h 中的日誌檔案不會被關閉的錯誤。這反過來會導致在使用 logrotate 等工具時發生檔案描述符洩漏。

    自有 ID:OTP-15997 輔助 ID:PR-2331

Kernel 6.3.1.2

改進與新功能

  • 已在 gen_udp:send/4,5 中新增傳送輔助資料(尤其是 TOS 欄位)的功能。

    自有 ID:OTP-15747 輔助 ID:ERIERL-294

Kernel 6.3.1.1

修正的錯誤與故障

Kernel 6.3.1

修正的錯誤與故障

  • 修正了使用 compressed 旗標開啟檔案時的效能衰退問題。

    自有 ID:OTP-15706 輔助 ID:ERIERL-336

Kernel 6.3

修正的錯誤與故障

  • 例如,如果 /etc/hosts 在核心應用程式啟動後才出現,則永遠不會讀取其內容。現在已修正此錯誤。

    自有 ID:OTP-14702 輔助 ID:PR-2066

  • 修正了當另一個程序正在進行垃圾回收時,執行 seq_trace:reset_trace() 可能會導致執行階段系統發生區段錯誤的錯誤。

    自有 ID:OTP-15490

  • 修正 erl_epmd:port_please 規格以包含 atom/0string/0

    自有 ID:OTP-15557 輔助 ID:PR-2117

  • Logger 處理程式 logger_std_h 現在會追蹤其日誌檔案的 inode,以便在 inode 變更時重新開啟檔案。例如,如果日誌檔案由編輯器開啟和儲存,就可能會發生這種情況。

    自有 ID:OTP-15578 輔助 ID:ERL-850

  • 當使用者特定的檔案模式提供給日誌處理程式 logger_std_h 時,先前會在沒有任何控制的情況下接受這些模式。現在已變更,因此 Logger 將如下調整檔案模式

    - 如果在清單中找不到 raw,則會加入。
    - 如果在清單中找不到 writeappendexclusive,則會加入 append
    - 如果在清單中找不到 delayed_write{delayed_write,Size,Delay},則會加入 delayed_write

    自有 ID:OTP-15602

改進與新功能

  • 標準日誌處理程式 logger_std_h 現在具有用於日誌輪換的新內部功能。輪換方案如下

    處理程式目前寫入的日誌檔案始終具有相同的名稱,即為處理程式設定的名稱。封存的檔案具有相同的名稱,但副檔名為「.N」,其中 N 為整數。最新的封存副檔名為「.0」,而最舊的封存副檔名數字最高。

    日誌檔案輪換的大小以及保留的封存檔案數量,分別由處理程式特定的設定參數 max_no_bytesmax_no_files 指定。

    封存可以壓縮,在這種情況下,它們會在整數之後取得「.gz」檔案副檔名。壓縮是使用處理程式特定的設定參數 compress_on_rotate 指定。

    自有 ID:OTP-15479

  • 新增了新的函數 logger:i/0logger:i/1。這些函數提供的資訊與 logger:get_config/0 和其他 logger:get_*_config 函數相同,但資訊的排序方式更符合邏輯,而且更容易閱讀。

    自有 ID:OTP-15600

  • 現在 Logger 可防止因模擬器或遠端節點產生大量日誌事件而導致的超載。

    自有 ID:OTP-15601

  • Logger 現在使用 os:system_time/1 而不是 erlang:system_time/1 來產生日誌事件時間戳記。

    自有 ID:OTP-15625

  • 新增函數 application:set_env/1,2application:set_env/2。這些函數採用應用程式設定參數清單,其行為相當於個別呼叫每個應用程式/金鑰組合的 application:set_env/4,但效率更高。

    set_env/1,2 會警告重複的應用程式或金鑰。如果在一個設定檔(例如 sys.config)中重複應用程式或金鑰,也會在啟動期間發出警告。

    自有 ID:OTP-15642 輔助 ID:PR-2164

  • 標準處理程式 logger_std_h 的處理程式特定設定參數已變更為更直觀,並且更類似於 disk_log 處理程式。

    先前只有一個參數,type,其值可以是 standard_iostandard_error{file,FileName}{file,FileName,Modes}

    現在已變更,因此允許下列參數

    type = standard_io | standard_error | file
    file = file:filename()
    modes = [file:mode()]

    所有參數皆為選填。type 預設為 standard_io,除非給定檔案名稱,在此情況下預設為 file。若 type 設定為 file,檔案名稱預設與處理常式的 ID 相同。

    潛在的不相容性是,logger:get_config/0logger:get_handler_config/1 現在會回傳新的參數,即使組態是使用舊的變體設定的,例如 #{type=>{file,FileName}}

    * 可能的不相容性 *

    自有 ID:OTP-15662

  • 新的組態參數 file_check 已新增至 Logger 處理常式 logger_std_h。此參數指定處理常式在檢查記錄檔是否仍然存在,以及 inode 是否與開啟時相同之前,可以等待多長時間(以毫秒為單位)。

    預設值為 0,表示此檢查會在每次寫入操作之前執行。設定較高的數字可能會提高效能,但會增加遺失記錄事件的風險。

    自有 ID:OTP-15663

核心 6.2.1

已修正的錯誤與故障

  • 設定 inet socket 的 recbuf 大小時,buffer 也會自動增加。修復一個錯誤,此錯誤會導致即使已明確設定 inet buffer 大小,也會觸發 inet buffer 大小的自動調整。

    自有 ID:OTP-15651 輔助 ID:ERIERL-304

核心 6.2

已修正的錯誤與故障

  • 新增一個新的函式 logger:update_handler_config/3,並且處理常式回呼 changing_config 現在有一個新的引數 SetOrUpdate,指示組態變更來自 set_handler_config/2,3 還是 update_handler_config/2,3

    這允許處理常式一致地將新的組態與舊的組態合併(如果變更來自 update_handler_config/2,3),或者與預設組態合併(如果變更來自 set_handler_config/2,3)。

    內建處理常式 logger_std_hlogger_disk_log_h 已相應更新。也修正了一個可能導致處理常式的內部狀態與儲存的組態之間不一致的錯誤。

    * 可能的不相容性 *

    自有 ID:OTP-15364

  • 修正當自訂 erl_epmd 用戶端未實作 address_please 時的回退。

    自有 ID:OTP-15388 輔助 ID:PR-1983

  • logger ets 表格沒有 read_concurrency 選項。現在已新增此選項。

    自有 ID:OTP-15453 輔助 ID:ERL-782

  • 在系統啟動期間,logger 有一個簡單的處理常式會列印到 stdout。在核心監督啟動後,此處理常式會被移除並替換為預設處理常式。由於一個錯誤,logger 先前發出一個偵錯列印,表示它收到一則非預期的訊息,這是來自簡單處理常式程序的 EXIT 訊息。現在已修正此問題。簡單處理常式的程序現在會在終止之前從 logger 程序取消連結。

    自有 ID:OTP-15466 輔助 ID:ERL-788

  • 如果 logger 處理常式 logger_std_h 的記錄檔被移除,則不會重新建立。因此,它無法與 'logrotate' 之類的工具一起使用。現在已修正此問題。

    自有 ID:OTP-15469

改進和新功能

  • 新增了一個函式 inet:getifaddrs/1,該函式會接收一個具有命名空間選項的清單,適用於支援該功能的平台,例如 Linux(只有?)。

    自有 ID:OTP-15121 輔助 ID:ERIERL-189、PR-1974

  • 為 TCP socket 新增 nopush 選項,該選項對應於 *BSD 上的 TCP_NOPUSH 和 Linux 上的 TCP_CORK

    這也用於 file:sendfile 的內部,以減少後續傳送操作的延遲。

    自有 ID:OTP-15357 輔助 ID:ERL-698

  • 最佳化 TCP socket 的 send_delay 處理,以更好地與 OTP-21 中引入的新 pollthread 實作搭配使用。

    自有 ID:OTP-15471 輔助 ID:ERIERL-229

核心 6.1.1

已修正的錯誤與故障

  • 修復一個錯誤,該錯誤會導致來自名稱與本機節點相同的節點的連線嘗試,導致 net_kernel 程序當機。

    自有 ID:OTP-15438 輔助 ID:ERL-781

核心 6.1

已修正的錯誤與故障

  • allnone 被記錄為核心組態參數 logger_level 的有效值,但會導致節點啟動期間當機。現在已修正此問題。

    自有 ID:OTP-15143

  • 修復節點間分散式連線上如何傳送滴答訊號的一些潛在錯誤行為。滴答訊號現在會傳送到 c 節點,即使有未傳送的緩衝資料,因為 c 節點需要滴答訊號才能傳送回覆滴答訊號。當由於未傳送的緩衝資料而抑制滴答訊號時,已傳送的資料量也計算錯誤。

    自有 ID:OTP-15162 輔助 ID:ERIERL-191

  • dist_util.erl 中的非語義變更,以消除 dialyzer 警告。

    自有 ID:OTP-15170

  • 修正 net_kernel:connect_node(node()) 以回傳 true(並且不執行任何動作),如同在 OTP-21.0 之前一樣。 也將此成功的「自我連線」記錄為預期的行為。

    自有 ID:OTP-15182 輔助 ID:ERL-643

  • logger_formatter 上的 single_line 選項在某些情況下會在對應箭頭之後新增一個不必要的逗號。現在已修正此問題。

    自有 ID:OTP-15228

  • 提高了分散式連線設定的穩健性。在 OTP-21.0 中,引入了真正的非同步連線設定。這是對該工作的進一步改進,以使模擬器更穩健,並且能夠在相關 Erlang 程序行為不當時恢復。

    自有 ID:OTP-15297 輔助 ID:OTP-15279、OTP-15280

改進和新功能

  • 新增一個新的巨集 ?LOG(Level,...)。這等效於現有的 ?LOG_<LEVEL>(...) 巨集。

    新增一個新的 Logger 報告回呼變體,它會接收一個額外引數,其中包含大小限制和換行的選項。 STDLIB 中的模組 proc_lib 將其用於當機報告。

    現在會對 Logger 組態進行更多錯誤檢查。

    自有 ID:OTP-15132

  • socket 選項 recvtosrecvttlrecvtclasspktoptions 已在 socket 模組中實作。請參閱 gen_tcpgen_udpinet 模組的說明文件。請注意,執行時期系統中對這些選項的支援是依平台而定。特別是 pktoptions,它非常特定於 Linux,並且已被定義它的 RFC 取代。

    自有 ID:OTP-15145 輔助 ID:ERIERL-187

  • 新增 logger:set_application_level/2 以設定一個應用程式中所有模組的 logger 等級。

    自有 ID:OTP-15146

核心 6.0.1

已修正的錯誤與故障

  • 修正 net_kernel 中的錯誤,該錯誤可能導致某些連線嘗試失敗時,模擬器當機。此錯誤存在於 kernel-6.0 (OTP-21.0) 之後。

    自有 ID:OTP-15280 輔助 ID:ERIERL-226、OTP-15279

核心 6.0

已修正的錯誤與故障

  • 釐清 rpc:multicall/5 的說明文件。

    自有 ID:OTP-10551

  • 當 DNS 解析器從伺服器取得 econnrefused 時,會保留無效的 socket,因此對下一個伺服器的查詢也會失敗。

    自有 ID:OTP-13133 輔助 ID:PR-1557

  • 沒有解析器後端會再回傳 V4Mapped IPv6 位址。這之前是不一致的,有些會,有些不會。為了方便使用這類位址,新增了一個新的函式 inet:ipv4_mapped_ipv6_address/1

    * 可能的不相容性 *

    自有 ID:OTP-13761 輔助 ID:ERL-503

  • 已根據檔案和 socket 操作應該能夠回傳的錯誤,更新 file:posix/0inet:posix/0 的類型規格。

    自有 ID:OTP-14019 輔助 ID:ERL-550

  • 修正在僅限 IPv6 的環境中執行初始分散式連線時的名稱解析。

    自有 ID:OTP-14501

  • 檔案操作以前會接受包含空字元(整數值為零)的檔名。這會導致名稱被截斷,並且在某些情況下,會混淆基本操作的引數。現在會拒絕包含空字元的檔名,並導致基本檔案操作失敗。

    此外,環境變數操作以前會接受包含空字元(整數值為零)的環境變數名稱。這會導致操作靜默地產生錯誤的結果。現在會拒絕名稱或值中包含空字元的環境變數名稱和值,並導致環境變數操作失敗。

    基本環境變數操作以前也接受環境變數名稱中的 $= 字元,導致各種問題。現在也拒絕環境變數名稱中的 $= 字元。

    此外,os:cmd/1 現在會拒絕其命令中的空字元。

    從現在起,erlang:open_port/2 也會拒絕 port 名稱中的空字元。

    * 可能的不相容性 *

    自有 ID:OTP-14543 輔助 ID:ERL-370

  • os:putenvos:getenv 不再直接存取程序環境,而是使用執行緒安全的模擬。唯一可觀察到的差異是,它不會與 libc getenv(3) / putenv(3) 同步,因此那些依賴驅動程式或 NIF 中該行為的人員將需要新增手動同步。

    在 Windows 上,這表示您無法再藉由在載入驅動程式/NIF 之前修改 PATH 來解析 DLL 相依性。為了減少這個問題,模擬器現在會將目標 DLL 的資料夾新增至 DLL 搜尋路徑。

    * 可能的不相容性 *

    自有 ID:OTP-14666

  • 修正可能導致當酬載資料傳送到隱藏節點但未接收時,在罕見情況下隱藏基本節點 (erl_interface) 的連線滴答訊號發生錯誤的滴答訊號逾時。

    自有 ID:OTP-14681

  • 讓群組立即回應來自 shell(例如 ssh)的 EXIT 訊號。

    自有 ID:OTP-14991 輔助 ID:PR1705

  • 在關閉的 socket 上呼叫 gen_tcp:send/2 現在會回傳 {error, closed},而不是 {error,enotconn}

    內部 ID:OTP-15001

  • included_applications 鍵值不再作為應用程式環境變數重複出現。先前,包含的應用程式可以使用 application:get[_all]_env(...)application:get[_all]_key(...) 函數讀取。現在,只能使用 application:get[_all]_key(...) 讀取。

    * 可能的不相容性 *

    內部 ID:OTP-15071

  • 透過 file:write_file_infofile:change_ownerfile:change_group 進行的擁有者和群組變更,在權限錯誤時不再回報成功。

    * 可能的不相容性 *

    內部 ID:OTP-15118

改進與新功能

  • Erlang/OTP 新增了一個新的日誌 API,請參閱 logger 手冊頁面以及 Kernel 使用者指南中的 記錄 章節。

    error_logger 的呼叫會自動重新導向到新的 API,並且仍然可以使用舊版的錯誤記錄器事件處理程式。但是,建議在編寫新程式碼時直接使用 Logger API。

    請注意以下潛在的不相容性

    • 核心設定參數 error_logger 仍然有效,但是如果預設處理程式的輸出目的地是用核心設定參數 logger 設定的,則會被覆蓋。

      一般而言,用於設定錯誤記錄器的參數會被用於設定 Logger 的新參數覆寫。

    • SASL 錯誤記錄的概念已被棄用,這表示預設情況下,SASL 應用程式不會影響記錄哪些日誌事件。

      預設情況下,監督者報告和當機報告會由 Kernel 啟動的預設 Logger 處理程式記錄,並與來自 Erlang/OTP 的其他標準日誌事件一樣,最終輸出到相同的目的地(終端機或檔案)。

      預設情況下不會記錄進度報告,但是可以透過將主要日誌層級設定為 info 來啟用,例如使用核心設定參數 logger_level

      為了與先前版本中的 SASL 錯誤記錄功能保持向後相容性,請將核心設定參數 logger_sasl_compatible 設定為 true。這樣可以防止預設的 Logger 處理程式記錄任何監督者、當機或進度報告。取而代之的是,SASL 在應用程式啟動期間會新增一個單獨的 Logger 處理程式,來處理這些日誌事件。SASL 設定參數 sasl_error_loggersasl_errlog_type 指定這些事件記錄的目的地(終端機或檔案)和嚴重性層級。

    由於 Logger 是 Erlang/OTP 21.0 中的新功能,因此我們保留在此版本之後的修補程式中引入 Logger API 和功能變更的權利。這些變更可能與初始版本向後相容,也可能不相容。

    * 可能的不相容性 *

    內部 ID:OTP-13295

  • 函式 inet:i/0 已被記錄。

    內部 ID:OTP-13713 輔助 ID:PR-1645

  • netnsbind_to_device 選項的類型規格已新增至 gen_tcpgen_udpgen_sctp 函數。

    內部 ID:OTP-14359 輔助 ID:PR-1816

  • 引入了用於實現 Erlang 分散式系統的替代載體的新功能。這主要包括支援使用分散式控制器處理程序(先前只能使用埠作為分散式控制器)。如需更多資訊,請參閱 ERTS 使用者指南 ➜ 如何為 Erlang 分散式系統實作替代載體 ➜ 分散式模組

    內部 ID:OTP-14459

  • seq_trace 標籤現在可以是任何 erlang 術語。

    內部 ID:OTP-14899

  • SSL 分散式系統協定 -proto inet_tls 已停止設定 SSL 選項 server_name_indication。已在 inet_tls_dist 中新增了用於客戶端和伺服器的新驗證函式,尚未記錄,這些函式會在對等憑證中檢查節點名稱(如果有的話)。用法也尚未記錄。

    內部 ID:OTP-14969 輔助 ID:OTP-14465、ERL-598

  • gen_server 呼叫 auth 伺服器的逾時時間從預設的 5 秒變更為 infinity

    內部 ID:OTP-15009 輔助 ID:ERL-601

  • 傳遞給 erl 的 -epmd_module 回呼模組已擴充為能夠進行名稱和埠解析。

    erl_epmd 參考手冊和 ERTS 使用者指南 如何為 Erlang 分散式系統實作替代節點探索 中也新增了文件。

    內部 ID:OTP-15086 輔助 ID:PR-1694

  • 在 sys.config 中使用相對路徑指定的包含設定檔,現在會先在 sys.config 本身的目錄中搜尋。如果找不到,也會在目前的運作目錄中搜尋。後者是為了向後相容性。

    內部 ID:OTP-15137 輔助 ID:PR-1838

核心 5.4.3.2

已修正的錯誤和故障

  • dist_util.erl 中的非語義變更,以消除 dialyzer 警告。

    自有 ID:OTP-15170

核心 5.4.3.1

已修正的錯誤和故障

  • 修正了節點間分散式系統連線傳送 tick 的一些潛在錯誤行為。即使有未傳送的緩衝資料,現在也會將 tick 傳送至 c 節點,因為 c 節點需要 tick 才能傳送回覆 tick。當由於未傳送的緩衝資料而抑制 tick 時,傳送的資料量計算不正確。

    自有 ID:OTP-15162 輔助 ID:ERIERL-191

核心 5.4.3

已修正的錯誤和故障

  • 修正了一些契約。

    內部 ID:OTP-14889

  • 拒絕載入名稱包含目錄分隔符號(Windows 上為 '/' 或 '\')的模組。

    內部 ID:OTP-14933 輔助 ID:ERL-564、PR-1716

  • 修正了在 Windows 上處理 os:cmd/2 選項 max_size 的錯誤。

    內部 ID:OTP-14940

核心 5.4.2

已修正的錯誤和故障

  • 新增 os:cmd/2,它將選項對應作為第二個引數。

    新增 max_size 作為 os:cmd/2 的選項,可控制 os:cmd/2 將傳回的結果的最大大小。

    內部 ID:OTP-14823

核心 5.4.1

已修正的錯誤和故障

  • 重構了一個內部 API。

    內部 ID:OTP-14784

核心 5.4

已修正的錯誤和故障

  • 在切換作業 (Ctrl+G) 後進行輸出的程序可能會永遠卡在 I/O 請求中。

    內部 ID:OTP-14571 輔助 ID:ERL-472

改進與新功能

  • 現在可以在鎖定計數模擬器 ( -emu_type lcnt ) 中完全切換執行階段的鎖定計數。預設會啟用所有項目以符合舊的行為,但是可以隨意切換特定的類別,在停用時只有最小的執行階段額外負荷。如需詳細資訊,請參閱 lcnt:rt_mask/1 的文件。

    內部 ID:OTP-13170

  • lcnt:collectlcnt:clear 將不再封鎖執行階段系統中的所有其他執行緒。

    內部 ID:OTP-14412

  • 一般 Unicode 改進。

    內部 ID:OTP-14462

核心 5.3.1

已修正的錯誤和故障

  • disk_log:open/1 中 'quiet' 選項的文件具有不正確的預設值。

    內部 ID:OTP-14498

核心 5.3

已修正的錯誤和故障

  • 函式 inet:ntoa/1 已修正為根據在編寫此函式後批准的 RFC 5935 回傳小寫字母。先前會回傳大寫字母,因此根據回傳的位址字串的使用方式,這可能是一個向後不相容的變更。

    函式 inet:parse_address/1 已修正為接受範圍位址上的 %-字尾。這些位址尚未運作,但不會產生剖析錯誤。

    * 可能的不相容性 *

    內部 ID:OTP-13006 輔助 ID:ERIERL-20、ERL-429

  • 修正在 Linux 上 gethostname 會錯誤地因 enametoolong 而失敗的錯誤。

    內部 ID:OTP-14310

  • 修正了當模組啟用 local 呼叫追蹤時,導致 code:is_module_native 錯誤地傳回 true 的錯誤。

    內部 ID:OTP-14390

  • 新增了從分散式節點早期拒絕無效節點名稱的功能。

    內部 ID:OTP-14426

改進與新功能

  • 由於現在原子 (atoms) 中允許使用 Unicode,因此節點名稱需要額外檢查,因為節點名稱限制為 Latin-1 字元集。

    內部 ID:OTP-13805

  • 已取代已棄用的符號 time unit 表示法的使用。

    內部 ID:OTP-13831 輔助 ID:OTP-13735

  • file:write_file(Name, Data, [raw]) 會在寫入之前將 Data 轉換為單一二元資料。這表示如果給定一個二元資料列表,並指示以 raw 模式寫入,它就無法利用 writev() 系統呼叫。

    內部 ID:OTP-13909

  • disk_log 的效能在某些極端情況(大型項目)下有所提升,並且文件說明也已釐清。

    內部 ID:OTP-14057 輔助 ID:PR-1245

  • 已新增偵測已變更程式碼的函數。code:modified_modules/0 會傳回所有目前已載入、且在磁碟上已變更的模組。code:module_status/1 會傳回模組的狀態。在 Shell 和 c 模組中,mm/0code:modified_modules/0 的簡寫,而 lm/0 則會重新載入所有目前已載入、且在磁碟上已變更的模組。

    內部 ID:OTP-14059

  • 在 Erlang 中引入事件管理器以處理作業系統訊號。可以訂閱一部分作業系統訊號,這些訊號會在 Kernel 應用程式中說明。

    內部 ID:OTP-14186

  • 現在可以在支援的平台上將 Socket 繫結至裝置 (SO_BINDTODEVICE)。

    此功能已實作,例如為了支援 Linux 下的 VRF-Lite;請參閱 VRF 和 GitHub Pull Request #1326

    內部 ID:OTP-14357 輔助 ID:PR-1326

  • 新增選項可將 shell 歷程記錄儲存在磁碟上,以便在工作階段之間重複使用歷程記錄。

    內部 ID:OTP-14409 輔助 ID:PR-1420

  • 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 的值。

    內部 ID:OTP-14417

  • global 模組使用的其中一個 ETS 資料表會以 {read_concurrency, true} 建立,以便減少競爭。

    內部 ID:OTP-14419

  • 相關文件中已新增警告,提醒不要在暴露的環境中使用不安全的散佈節點。

    內部 ID:OTP-14425

Kernel 5.2

已修正的錯誤和故障

  • 修正 os:cmd 清理期間的競爭狀況,此狀況會導致 os:cmd 無限期地掛起。

    內部 ID:OTP-14232 輔助 ID:seq13275

改良功能和新功能

  • 在 'file' 模組中,使用路徑列表的函數(例如 file:path_consult/2)現在會在路徑包含非目錄的內容時,繼續在路徑中搜尋。

    內部 ID:OTP-14191

  • 已知會收到許多訊息的兩個 OTP 程序為 'rex'(由 'rpc' 使用)和 'error_logger'。這些程序現在會將未處理的訊息儲存在程序堆積之外,這可能會降低垃圾收集的成本。

    內部 ID:OTP-14192

Kernel 5.1.1

已修正的錯誤和故障

  • code:add_pathsa/1 和命令列選項 -pa 都會在程式碼路徑開頭加入指定目錄列表時,還原此列表的順序。現在已將此行為記錄下來。

    內部 ID:OTP-13920 輔助 ID:ERL-267

  • 新增遺失的執行階段相依性至 erts-8.1。這應該在 kernel-5.1 (OTP-19.1) 中完成,因為它在沒有至少 erts-8.1 (OTP-19.1) 的情況下無法執行。

    內部 ID:OTP-14003

  • 已改良 gen_{tcp,udp,sctp}:controlling_process/2 的類型和文件。

    內部 ID:OTP-14022 輔助 ID:PR-1208

Kernel 5.1

已修正的錯誤和故障

  • 修正呼叫 seq_trace:get_system_tracer() 時的記憶體洩漏問題。

    內部 ID:OTP-13742

  • 修正當將應用程式的 ebin 目錄新增至程式碼路徑時,code:priv_dir/1 函數會傳回相同應用程式之 priv 目錄不正確路徑的問題。

    內部 ID:OTP-13758 輔助 ID:ERL-195

  • 修正新增兩層程式碼路徑時 code_server 當機的問題。

    內部 ID:OTP-13765 輔助 ID:ERL-194

  • 在連線至 EPMD 時遵守 -proto_dist 切換。

    內部 ID:OTP-13770 輔助 ID:PR-1129

  • 修正當關機逾時時間無限期(例如監督者)的程序嘗試在終止時載入程式碼時,init:stop 可能會產生死鎖的錯誤。

    內部 ID:OTP-13802

  • 關閉在 os:cmd 中執行的命令的 stdin。這是向後相容性修正,可還原 19.0 版之前的 os:cmd 行為。

    內部 ID:OTP-13867 輔助 ID:seq13178

改良功能和新功能

  • 新增 net_kernel:setopts/2net_kernel:getopts/2,以便在執行階段控制散佈 Socket 的選項。

    內部 ID:OTP-13564

  • 已實作 DSCP 的基本支援,作為 IPv6 Socket 的 tclass Socket 選項。

    內部 ID:OTP-13582

Kernel 5.0.2

已修正的錯誤和故障

  • 當從將 trap_exit 設定為 true 的程序呼叫 os:cmd 時,'EXIT' 訊息會留在訊息佇列中。此錯誤是在 kernel vsn 5.0.1 中引入的。

    內部 ID:OTP-13813

Kernel 5.0.1

已修正的錯誤和故障

  • 修正 os:cmd 錯誤,其中使用 & 建立背景工作會導致 os:cmd 掛起,直到背景工作終止或關閉其 stdout 和 stderr 檔案描述子。此錯誤自 kernel 5.0 起就存在。

    內部 ID:OTP-13741

Kernel 5.0

已修正的錯誤和故障

  • 已改良 on_load 函數的處理。主要的改良是,如果程式碼升級因 on_load 函數失敗而失敗,則會保留模組的先前版本。

    內部 ID:OTP-12593

  • rpc:call()rpc:block_call() 有時會導致例外狀況(文件中未提及)。已修正此問題,現在會傳回 {badrpc,Reason}

    內部 ID:OTP-13409

  • 在 Windows 上,對於早期載入的模組(例如 lists 模組),code:which/1 會傳回混用斜線和反斜線的路徑,例如:"C:\\Program Files\\erl8.0/lib/stdlib-2.7/ebin/lists.beam"。已修正此問題。

    內部 ID:OTP-13410

  • 讓 file:datasync 在 Mac OSX 上使用 fsync 而非 fdatasync。

    內部 ID:OTP-13411

  • 在不具有原生 sendfile 的平台上,用於後援 sendfile 實作的預設區塊大小已縮小,以便減少連線問題。

    內部 ID:OTP-13444

  • 在某些 Unix 平台上(例如,OS X 和 FreeBSD),大型檔案寫入(2GB 或以上)可能會失敗。

    內部 ID:OTP-13461

  • 已修正一個錯誤,其中 DNS 解析器 inet_res 在啟動後,不會立即重新整理其對 resolv.conf 內容的檢視,因此會導致名稱解析失敗。此錯誤由 Michal Ptaszek 在 GitHub Pull Request #949 中回報並建議修正。

    內部 ID:OTP-13470 輔助 ID:Pull #969

  • 修正 global_group 中的程序洩漏問題。

    內部 ID:OTP-13516 輔助 ID:PR-1008

  • 函數 inet:gethostbyname/1 現在會採用解析器選項 inet6,而不是一律查詢 IPv4 位址。

    * 可能的不相容性 *

    內部 ID:OTP-13622 輔助 ID:PR-1065

  • 現在會對 init:stop/1Status 引數進行健全性檢查,以確保 erlang:halt 不會失敗。

    內部 ID:OTP-13631 輔助 ID:PR-911

改良功能和新功能

  • 新增 {line_delim, byte()} 選項至 inet:setopts/2 和 decode_packet/3

    內部 ID:OTP-12837

  • 新增 os:perf_counter/1

    perf_counter 是一種非常非常便宜且高解析度的計時器,可用於為系統事件加上時間戳記。它沒有單調性保證,但在大多數作業系統上應公開單調時間。

    內部 ID:OTP-12908

  • 已在 Unix 平台上最佳化 os:cmd 呼叫,以便隨排程器數量擴展。

    內部 ID:OTP-13089

  • 在 'code' 模組中新增了可以一次載入多個模組的新函數。這些函數包括 code:atomic_load/1code:prepare_loading/1code:finish_loading/1code:ensure_modules_loaded/1

    自有 ID:OTP-13111

  • 程式碼路徑快取功能在實踐中證明不太實用,因此已移除。如果嘗試啟用程式碼路徑快取,將會顯示警告報告,告知使用者該功能已移除。

    自有 ID:OTP-13191

  • 當嘗試啟動與現有節點同名的分散式 Erlang 節點時,錯誤訊息將比以前更簡短且更容易閱讀。範例:

    協定 'inet_tcp': 名稱 somename@somehost 似乎正被另一個 Erlang 節點使用

    自有 ID:OTP-13294

  • 預設錯誤記錄器的輸出在某種程度上更美觀且更容易閱讀。預設錯誤記錄器在 OTP 系統啟動期間使用。如果啟動失敗,輸出將更容易閱讀。

    自有 ID:OTP-13325

  • 在 R12B 中已棄用的函數 rpc:safe_multi_server_call/2,3 已移除。

    * 可能的不相容性 *

    自有 ID:OTP-13449

  • 更新 dist_util 中的錯誤原因,並在呼叫 net_kernel:verbose(1) 時將它們顯示在日誌中。

    自有 ID:OTP-13458

  • 已實作 Unix 網域通訊端的實驗性支援。如果您想試用,請閱讀原始碼。範例:gen_udp:open(0, [{ifaddr,{local,"/tmp/socket"}}])。在收到關於實驗性 API 的使用者回饋後,將會撰寫文件。

    自有 ID:OTP-13572 輔助 ID:PR-612

  • 允許將 heart 配置為在呼叫 HEART_COMMAND 之前不終止先前的模擬器。這可透過將環境變數 HEART_NO_KILL 設定為 TRUE 來完成。

    自有 ID:OTP-13650

核心 4.2

已修正的錯誤和故障

  • code:load_abs([10100]) 會導致整個執行階段系統當機並建立當機傾印。已修正為在呼叫程序中產生錯誤例外。

    也修正了程式碼載入函數的規格,並在文件中新增了更多關於程式碼載入函數傳回的錯誤原因的資訊。

    自有 ID:OTP-9375

  • gen_tcp:accept/2 不是時間扭曲安全。因為它在計算逾時時使用了與 erlang:now/0 傳回的相同的時間。現在已修正此問題。

    自有 ID:OTP-13254 輔助 ID:OTP-11997, OTP-13222

  • 修正 inet:getifaddrs/1 的合約。

    自有 ID:OTP-13335 輔助 ID:ERL-95

改進和新功能

  • 時間扭曲安全性改進。

    在追蹤、循序追蹤和系統設定檔功能中引入了 monotonic_timestampstrict_monotonic_timestamp 選項。因為已經存在的 timestamp 選項不是時間扭曲安全。

    ets:info/2dets:info/2 中引入了 safe_fixed_monotonic_time 選項。因為已經存在的 safe_fixed 選項不是時間扭曲安全。

    自有 ID:OTP-13222 輔助 ID:OTP-11997

  • 為 heart 新增驗證回呼

    現在可以安裝 erlang heart 程序驗證回呼。如果存在,驗證回呼將在任何心跳傳送到 heart 埠程式之前執行。如果驗證失敗或停止,則不會傳送心跳,並且節點將會當機。

    使用 'check_schedulers' 選項,heart 會在心跳傳送到埠程式之前執行排程器的回應檢查。如果回應檢查失敗,則不會執行心跳(如預期)。

    自有 ID:OTP-13250

  • 釐清 net_kernel:allow/1 的文件

    自有 ID:OTP-13299

  • EPMD 支援 IPv4 和 IPv6

    也影響最舊的支援 Windows 版本。

    自有 ID:OTP-13364

核心 4.1.1

已修正的錯誤和故障

  • 現在根據 RFC 4343,透過 inet_res(Erlang DNS 解析器)完成的主機名稱查詢不區分大小寫。由 Holger Weiß 修補。

    自有 ID:OTP-12836

  • IPv6 分散式處理程式已更新為與 IPv4 共用程式碼,以便在 IPv6 中也支援所有功能。修正了將 IPv4 位址用作主機名稱時的錯誤。

    自有 ID:OTP-13040

  • 根據 RFC 4343,在內部 DNS 解析器 inet_res 中快取主機名稱時已不區分主機名稱的字元大小寫。

    自有 ID:OTP-13083

  • 已修正熟化檔案模式緩衝,因此 file:position/2 現在在 Posix 系統上按照 Posix 工作,也就是說,當 file:position/2 傳回錯誤時,檔案指標不會受到影響。

    但是,Windows 系統文件對此點不明確,因此 file:position/2 的文件仍然沒有任何保證。

    已修正熟化檔案模式 file:pread/2,3 和 file:pwrite/2,3,以像 file:position/2 和 file:read/2 或 file:write/2 的組合一樣採用字元編碼。這可能不太有用,因為呼叫端上的字元表示形式為拉丁文 1,句點。

    自有 ID:OTP-13155 輔助 ID:PR#646

改進和新功能

  • 新增 {line_delim, byte()} 選項至 inet:setopts/2 和 decode_packet/3

    內部 ID:OTP-12837

核心 4.1

改進和新功能

  • 已引入一種機制,用於限制內建錯誤記錄器事件將產生的文字量。它對於限制日誌檔案的大小和用於產生日誌的 CPU 時間都非常有用。

    此機制是實驗性的,因為如果發現它沒有解決它應該解決的問題,則可能會變更。在這種情況下,此機制可能會進行不向後相容的改進。

    請參閱核心應用程式中 config 參數 error_logger_format_depth 的文件,以了解如何開啟此功能。

    自有 ID:OTP-12864

核心 4.0

已修正的錯誤和故障

  • 修正 file:read_line/1 針對 Unicode 內容的錯誤處理。

    自有 ID:OTP-12144

  • 引入 os:getenv/2,它類似於 os:getenv/1,但如果要求的環境變數未定義,則傳回傳遞的預設值。

    自有 ID:OTP-12342

  • 現在可以在 JCL 模式(使用 Ctrl-Y)中貼上在前一個 shell 工作階段中複製的文字。此外,還修正了在貼上文字時導致 JCL 模式當機的錯誤。

    自有 ID:OTP-12673

  • 確保從字串剖析時,IPv6 位址的每個區段最多包含 4 個十六進位數字

    自有 ID:OTP-12773

改進和新功能

  • 新 BIF:erlang:get_keys/0,列出與程序字典關聯的所有索引鍵。注意:erlang:get_keys/0 是自動匯入的。

    * 可能的不相容性 *

    自有 ID:OTP-12151 輔助 ID:seq12521

  • 為了保證傳送到實作 user_drv 協定的程序的輸出在回覆之前列印,已將內部 group 到 user_drv 協定變更為同步。此協定由 standard_output 裝置和 ssh 應用程式在充當用戶端時使用。

    此變更將先前在列印到 standard_io 和其他最終進入 user_drv 的裝置時的無限緩衝區變更為 1KB。

    * 可能的不相容性 *

    自有 ID:OTP-12240

  • inflateInit/2deflateInit/6 函數現在接受等於 8 和 -8 的 WindowBits 引數。

    自有 ID:OTP-12564

  • 預設將錯誤記錄器警告對應到警告訊息。

    自有 ID:OTP-12755

  • 預設將 beam 錯誤記錄器警告對應到警告訊息。先前,這些訊息預設對應到錯誤通道。

    自有 ID:OTP-12781

  • gen_tcp:shutdown/2 現在是非同步的

    這解決了舊實作中的以下問題

    當 TCP 對等點處於閒置或緩慢狀態時,它不會被封鎖。這是呼叫 shutdown() 時預期的行為:呼叫端需要能夠繼續從通訊端讀取,而不是被阻止這樣做。

    它不會截斷輸出。如果 TCP 對等點處於閒置或緩慢狀態,目前版本的 gen_tcp:shutdown/2 將在約 10 秒後截斷驅動程式佇列中的任何輸出資料。更糟的是,它甚至不會通知任何人資料已被截斷:'ok' 會傳回給呼叫端;並且會將 FIN 而非 RST 傳送到 TCP 對等點。

    * 可能的不相容性 *

    自有 ID:OTP-12797

  • 在許多情況下,使用者程式碼需要能夠區分正常關閉的通訊端和已中止的通訊端。設定選項 {show_econnreset, true} 可讓使用者在主動和被動通訊端上都接收 ECONNRESET 錯誤。

    自有 ID:OTP-12843

核心 3.2.0.1

已修正的錯誤和故障

  • 在一次呼叫任何 gen_tcp 函數時,無法多次使用 'raw' 通訊端選項,因為只使用其中一個選項。此錯誤已修正,並且也修正了關於從 inet:setopts/2 傳播錯誤碼的小錯誤。

    自有 ID:OTP-11482 輔助 ID:seq12872

核心 3.2

已修正的錯誤和故障

  • 已修正導致主機名稱解析中無限迴圈的錯誤。若要觸發此錯誤,您必須從設定檔(例如 .inetrc)輸入偽造的搜尋方法。

    由 Emil Holmström 指出錯誤

    自有 ID:OTP-12133

  • standard_error 程序現在正確處理 getopts I/O 協定請求,並以與 standard_io 相同的方式儲存其編碼。

    此外,io:put_chars(standard_error, [oops]) 先前可能會導致 standard_error 程序當機。現在已修正此問題。

    自有 ID:OTP-12424

改進和新功能

  • 已新增允許為分散式通訊端設定通訊端選項的核心應用程式的設定參數。請參閱應用程式核心文件;參數 'inet_dist_listen_options' 和 'inet_dist_connect_options'。

    自有 ID:OTP-12476 輔助 ID:OTP-12476

核心 3.1

已修正的錯誤和故障

  • 確保在需要時安裝 .hrl 檔案

    自有 ID:OTP-12197

  • 從核心應用程式中移除了未記錄的應用程式環境變數 'raw_files'。每次要在檔案模組中開啟原始檔案時,都會檢查此變數(透過呼叫 application:get_env/2)。

    自有 ID:OTP-12276

  • 修正了使用 gen_udp 的 netns 選項時的錯誤,該錯誤只在它是最後一個選項時才會意外生效。

    自有 ID:OTP-12314

改進和新功能

  • 更新了 inet 緩衝區大小選項的文件。

    自有 ID:OTP-12296

  • 在 file_info 和 link_info 函數中引入新的 'raw' 選項。此選項允許呼叫者不透過檔案伺服器取得保證為本機檔案的資訊。

    自有 ID:OTP-12325

核心 3.0.3

修正的錯誤和故障

  • 在 net_adm:names/1 中接受 inet:ip_address()

    自有 ID:OTP-12154

核心 3.0.2

修正的錯誤和故障

  • OTP-11850 修正了 filelib:wildcard/1 以處理損壞的符號連結。然而,此修正引入了問題,因為符號連結不再用於 filelib:ensure_dir/1、filelib:is_dir/1、filelib:file_size/1 等函數。現在已修正此問題。

    自有 ID:OTP-12054 輔助 ID:seq12660

核心 3.0.1

修正的錯誤和故障

  • 如果提供給 application_controller:change_application_data 的 Config 包含其他設定檔,則只會針對已存在的(已載入的)應用程式展開。如果升級新增了一個在包含的設定檔中具有設定資料的新應用程式,則新應用程式不會獲得正確的設定資料。

    現在已變更為將針對所有應用程式展開設定資料。

    自有 ID:OTP-11864

  • 允許重新載入預先載入的模組,例如 erlang,但這可能會導致奇怪和不希望發生的事情,例如呼叫 apply/3 進入迴圈。預先載入的模組現在預設為「黏性」。 (感謝 Loïc Hoguin 回報此錯誤。)

    code:add_path("/ending/in/slash/") 會移除尾部的斜線,將 /ending/in/slash 新增至程式碼路徑。但是,code:del_path("/ending/in/slash/") 無法移除路徑,因為它不會移除尾部的斜線。這已修正。

    自有 ID:OTP-11913

  • 修正 erts_debug:size/1 以處理 Map 大小

    自有 ID:OTP-11923

  • 已移除 file:file_info/1 的文件。該函數本身很久以前就已移除。

    自有 ID:OTP-11982

核心 3.0

修正的錯誤和故障

  • 修正了終止應用程式時的死鎖可能性

    自有 ID:OTP-11171

  • 修正了如果套接字處於被動模式,sendfile 會針對遠端關閉的套接字傳回錯誤程式碼的錯誤。(感謝 Vincent Siliakus 回報此錯誤。)

    自有 ID:OTP-11614

  • 將新的 persistent 選項新增至 application:set_env/4application:unset_env/3。使用 persistent 選項設定的環境金鑰不會被載入時應用程式資源檔中設定的金鑰覆寫。這表示在載入應用程式後以及重新載入應用程式時,持續性值將會保留。(感謝 José Valim)

    自有 ID:OTP-11708

  • 修改了 file:set_cwd/1 的規格,使其也接受二進位檔作為引數。這在程式碼中一直是允許的,但規格中沒有反映,因為二進位檔主要用於原始檔名。原始檔名是未根據 file:native_name_encoding() 編碼的名稱,這些名稱不允許在 file:set_cwd/1 中使用。但是,現在規格更加寬鬆,以避免不必要的 Dialyzer 警告。原始檔名仍然會在執行階段失敗,原因為 'no_translation'。(感謝 José Valim)

    自有 ID:OTP-11787

改進和新功能

  • 更新了 heart:set_cmd/1,允許在給定的 heart 命令中使用 Unicode 碼位 > 255

    自有 ID:OTP-10843

  • 修正了 Dialyzer 的 unmatched_return 警告。

    自有 ID:OTP-10908

  • 讓 erlang:open_port/2 產生和 spawn_executable 處理 Unicode。

    自有 ID:OTP-11105

  • Erlang/OTP 已移植到即時作業系統 OSE。該移植支援 smp 和非 smp 模擬器。有關移植的詳細資訊以及如何開始,請參閱 ose 應用程式中的使用者指南。

    請注意,並非 Erlang/OTP 的所有部分都已移植。

    可以運作的值得注意的事項包括:非 smp 和 smp 模擬器、OSE 訊號互動、加密、asn1、run_erl/to_erl、tcp、epmd、分發以及 Erlang 的大多數(如果不是全部)非作業系統特定功能。

    無法運作的值得注意的事項包括:udp/sctp、os_mon、erl_interface、排程器繫結。

    自有 ID:OTP-11334

  • 為 TCP、UDP 和 SCTP 新增 {active,N} 套接字選項,其中 N 是 -32768..32767 範圍內的整數,以允許呼叫者指定要傳遞到控制程序之資料訊息的數量。一旦套接字傳遞的訊息計數達到 0,或者使用 inet:setopts/2 明確設定為 0,或在建立套接字時包含 {active,0} 作為選項,則套接字會轉換為被動模式 ({active, false}),而套接字的控制程序會收到一則訊息,通知它轉換。TCP 套接字會收到 {tcp_passive,Socket},UDP 套接字會收到 {udp_passive,Socket},而 SCTP 套接字會收到 {sctp_passive,Socket}。

    套接字的傳遞訊息計數預設為 0,但可以使用 {active,N} 透過任何將套接字選項作為引數的 gen_tcp、gen_udp 或 gen_sctp 函數,或者透過 inet:setopts/2 來設定。新的 N 值會新增至套接字的目前計數器值,而負數可以用於減少計數器值。如果指定的數字會導致套接字的計數器值超過 32767,則會產生 einval 錯誤。如果指定的負數會導致計數器值變成負數,則套接字的計數器值會設定為 0,而套接字會轉換為被動模式。如果計數器值已經是 0,且指定了 inet:setopts(Socket, [{active,0}]),則計數器值會保持在 0,但會為套接字產生適當的被動模式轉換訊息。

    感謝 Steve Vinoski

    自有 ID:OTP-11368

  • 呼叫 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

  • 將 sync 選項新增至 file:open/2。

    sync 選項會在支援該旗標或其等效旗標的平台(例如,Windows 上的 FILE_FLAG_WRITE_THROUGH)上將 POSIX O_SYNC 旗標新增至開啟系統呼叫。對於不支援它的平台,如果傳入了 sync 選項,file:open/2 會傳回 {error, enotsup}。感謝 Steve Vinoski 和 Joseph Blomstedt

    自有 ID:OTP-11498

  • 已修正 inet:ntoa/1 的合約。

    感謝 Max Treskin。

    自有 ID:OTP-11730

核心 2.16.4.1

已知錯誤和問題

  • 當使用 gen_tcp:connect 和具有 port 和/或 ipfd 選項時,portip 選項會被忽略。這已修正,因此如果 port 和/或 ipfd 一起指定,則會要求針對該 fd 繫結。如果未指定 port 和/或 ip,則不會呼叫繫結。

    自有 ID:OTP-12061

核心 2.16.4

修正的錯誤和故障

  • 修正了 inet:ifget/2 和 inet:ifget/3 傳回值的類型規格。感謝 Ali Sabil。

    自有 ID:OTP-11377

  • 修正了 erts、核心和 ssh 中的各種錯字。感謝 Martin Hässler。

    自有 ID:OTP-11414

  • 修正 rpc 多重呼叫範例程式碼。感謝 Edwin Fine。

    自有 ID:OTP-11471

  • 在極少數情況下,呼叫 inet:close/1gen_tcp:close/1gen_udp:close/1gen_sctp:close/1 的程序可能會無限期地掛起。

    內部 ID:OTP-11491

改進和新功能

  • 新增 RFC 4960 中描述的更多 SCTP 錯誤。感謝 Artem Teslenko。

    內部 ID:OTP-11379

  • 新增 BIF os:unsetenv/1,可刪除環境變數。感謝 Martin Hässler。

    內部 ID:OTP-11446

核心 2.16.3

錯誤修正與故障排除

  • 修正 Erlang Shell 中使用者切換命令說明中的縮排問題。感謝 Sylvain Benner。

    內部 ID:OTP-11209

改進和新功能

  • 先前的未記載函式 ntoa/1 已新增至 inet 文件,並在 inet 模組中匯出。

    內部 ID:OTP-10676 輔助 ID:OTP-10314

  • 修正 abcast() 函式註解中的錯字。感謝 Johannes Weissl。

    內部 ID:OTP-11219

  • 新增 application:ensure_all_started/1-2。感謝 Fred Hebert。

    內部 ID:OTP-11250

  • 讓 edlin 理解一些重要的控制鍵。感謝 Stefan Zegenhagen。

    內部 ID:OTP-11251

  • 清理 hipe_unified_loader,消除規格中 is_subtype/2 的使用、將模組本機的 void 函式改為返回 'ok' 而不是 [],並確保沒有 dialyzer 警告(使用 --Wunmatched_returns)。感謝 Kostis Sagonas。

    內部 ID:OTP-11301

核心 2.16.2

錯誤修正與故障排除

  • 已修正 prim_inet 中的錯誤。如果在關閉 socket port 時,port 的擁有者在不恰當的時間被終止,port 可能會變成孤立,導致 port 和 socket 洩漏。由 Fred Herbert、Dmitry Belyaev 和其他人回報。

    內部 ID:OTP-10497 輔助 ID:OTP-10562

  • 已修正使用內部查詢類型(例如 'file' 和 'dns')時,主機名稱解析的大小寫敏感性相關的幾個錯誤。根據 RFC 4343「網域名稱系統 (DNS) 大小寫不敏感性澄清」,在查詢主機名稱時,ASCII 字母 a-z 應被視為與 A-Z 相同,但情況並非總是如此。

    內部 ID:OTP-10689 輔助 ID:seq12227

改進和新功能

  • 新增 application:ensure_started/1,2。它等同於 application:start/1,2,只是對於已經啟動的應用程式,它會返回 ok

    內部 ID:OTP-10910

  • 優化與檔案 I/O 伺服器的通訊。感謝 Anthony Ramine。

    內部 ID:OTP-11040

  • 現在,具有非 ASCII 字元的 Erlang 原始程式檔以 UTF-8 編碼(而不是 latin1)。

    內部 ID:OTP-11041 輔助 ID:OTP-10907

  • 透過使用無鎖實作,優化在相同 socket 上同時進行的 inet_db 操作。

    對系統特性的影響:效能提升。

    內部 ID:OTP-11074

  • 在 OTP-R16A 中引入的 high_msgq_watermarklow_msgq_watermark inet socket 選項只能在 TCP socket 上設定。這些選項現在是通用的,可以在所有類型的 socket 上設定。

    內部 ID:OTP-11075 輔助 ID:OTP-10336

  • 修正 Windows 中 os:cmd/1 下的深層列表引數錯誤。感謝 Aleksandr Vinokurov。

    內部 ID:OTP-11104

核心 2.16.1

錯誤修正與故障排除

  • 已修正 application_controller 模組中可能導致錯誤原因的崩潰錯誤。

    內部 ID:OTP-10754

  • 修正 code:is_module_native/1,在 R16A 中,對於包含 BIF(例如 lists)的 hipe 編譯模組,有時會返回 false。

    內部 ID:OTP-10870

  • 當接收失敗時(例如,由於格式錯誤的封包),在非被動模式下,尊重 tcp socket 上的 {exit_on_close,false} 選項,僅執行半關閉,並仍然允許在 socket 上傳送。(感謝 Anthony Molinaro 和 Steve Vinoski 回報問題)

    內部 ID:OTP-10879

改進和新功能

  • 當節點由於重複名稱而啟動失敗時,提供稍微友善的錯誤訊息。感謝 Magnus Henoch。

    內部 ID:OTP-10797

  • 由於 Unicode 支援而進行的雜項更新。

    內部 ID:OTP-10820

  • 新增函式 code:get_mode(),可用於偵測程式碼伺服器的行為方式。感謝 Vlad Dumitrescu

    內部 ID:OTP-10823

  • 修正 gen_tcp:send/2 中錯誤原因的類型。感謝 Sean Cribbs。

    內部 ID:OTP-10839

  • 已新增可處理原始檔名的 file:list_dir_all/1file:read_link_all/1。請參閱 STDLIB 使用者指南,以瞭解有關原始檔名的資訊。

    內部 ID:OTP-10852

核心 2.16

錯誤修正與故障排除

  • 在 .app 檔案中,'modules' 列表中不再允許使用 {Mod,Vsn}

    這在早期是可行的,儘管從未在 .app 檔案參考手冊中記錄。然而,在 application:load/[1,2] 的文件中可以看到,在該文件中,與 .app 檔案中相同的 term 可以用作第一個引數。

    由於從未使用 Vsn 部分,因此已移除此可能性。

    * 可能的不相容性 *

    內部 ID:OTP-10417

  • 已修正 erl_ddll:format_error/1 的合約。(感謝 Joseph Wayne Norton。)

    內部 ID:OTP-10473

  • 將啟動時的應用程式崩潰訊息列印輸出變更為格式化的字串(感謝 Serge Aleynikov)

    內部 ID:OTP-10620

  • 已修正 base64 模組中的 ascii_string() 類型。已清理 file:file_info() 類型。在文件中,file:fd() 類型已變為不透明。

    內部 ID:OTP-10624 輔助 ID:kunagi-352 [263]

改進和新功能

  • Inet 匯出功能

    inet:parse_ipv4_address/1、inet:parse_ipv4strict_address/1、inet:parse_ipv6_address/1、inet:parse_ipv6strict_address/1、inet:parse_address/1 和 inet:parse_strict_address 現在從 inet 模組匯出。

    內部 ID:OTP-8067 輔助 ID:kunagi-274 [185]

  • 已新增 IPv6 socket 的布林 socket 選項 'ipv6_v6only'。該選項的預設值取決於作業系統,因此旨在跨平台應用程式在建立 inet6 接聽/目的地 socket 時應考慮使用 {ipv6_v6only,true},並且如有必要,也在同一 port 上為 IPv4 流量建立 inet socket。請參閱文件。

    內部 ID:OTP-8928 輔助 ID:kunagi-193 [104]

  • 已實作 Unicode 支援。

    內部 ID:OTP-10302

  • 已更新 global:register_name/3 的文件,以提及使用 {Module,Function} 作為方法引數(解析函式)已過時。

    內部 ID:OTP-10419

  • 修正 Oracle Solaris 上 sendfile 在完成部分傳送時會返回錯誤的錯誤。

    內部 ID:OTP-10549

  • 如果嘗試呼叫存在的模組中不存在的函式,error_handler 模組現在將呼叫 '$handle_undefined_function'/2。請參閱 error_handler 模組的文件,以瞭解詳細資訊。

    內部 ID:OTP-10617 輔助 ID:kunagi-340 [251]

  • 在必要時,已將說明編碼方式的註解新增至 Erlang 檔案。該註解旨在於 Erlang/OTP R17B 中移除,屆時 UTF-8 將成為預設編碼。

    內部 ID:OTP-10630

  • 不要不必要地返回錯誤的 term。(感謝 Kostis Sagonas。)

    內部 ID:OTP-10662

  • 已修正一些超出 PDF 頁面寬度的範例。

    內部 ID:OTP-10665

  • 新增 file:allocate/3 操作

    此操作允許預先配置檔案空間。它僅在支援此類操作的系統上成功。(感謝 Filipe David Manana)

    內部 ID:OTP-10680

  • 新增 application:get_key/3。新函式為組態參數提供預設值。感謝 Serge Aleynikov。

    內部 ID:OTP-10694

  • 將搜尋功能新增至 Erlang shell 的歷史記錄。感謝 Fred Herbert。

    內部 ID:OTP-10739

核心 2.15.3

錯誤修正與故障排除

  • 確保在要求時產生 'erl_crash.dump'。這將會變更 erl_crash.dump 的行為。

    * 如果未設定 ERL_CRASH_DUMP_SECONDS,現在會在崩潰時立即終止 beam,而不會寫入崩潰轉儲檔案。

    * 將 ERL_CRASH_DUMP_SECONDS 設定為 0 也會在崩潰時立即終止 beam,而不會寫入崩潰轉儲檔案,亦即與未設定 ERL_CRASH_DUMP_SECONDS 環境變數相同。

    * 將 ERL_CRASH_DUMP_SECONDS 設定為負值會讓 beam 無限期地等待寫入崩潰轉儲檔案。

    * 將 ERL_CRASH_DUMP_SECONDS 設定為正值會讓 beam 等待那麼多秒鐘以寫入崩潰轉儲檔案。

    正值會為 beam 和 heart(如果 heart 正在執行)設定警報/逾時以重新啟動。

    * 可能的不相容性 *

    內部 ID:OTP-10422 輔助 ID:kunagi-250 [161]

核心 2.15.2

錯誤修正與故障排除

  • 修正使用 controlling_process/2 時,如果 self() 崩潰,將 self() 作為第二個引數會導致 port 洩漏的問題。(感謝 Ricardo Catalinas Jiménez)

    內部 ID:OTP-10094

  • 當使用 file:sendfile 後援時傳送大型檔案時,file:sendfile 會崩潰。此問題現已修正。

    內部 ID:OTP-10098

  • 修正使用有限逾時進行本機呼叫的 rpc:call/5(感謝 Tomer Chachamu)

    專屬 ID:OTP-10149

  • 修正 escript/主要封存檔重新載入

    如果 escript/主要封存檔在加入程式碼路徑後,其修改時間(mtime)發生變更,則正確地重新載入封存檔並更新快取。(感謝 Tuncer Ayaz)

    專屬 ID:OTP-10151

  • 在以 Unicode 檔案模式執行的系統上(例如,在 MacOSX 或 Linux 上,使用啟動參數 +fnu 或 +fna 及正確的 LOCALE),支援以非 ASCII 字元(碼位大於 127)命名的家目錄。此外,在適用的環境中也支援具有 Unicode 內容的環境變數。

    專屬 ID:OTP-10160

  • 允許混合 IPv4 和 IPv6 位址用於 sctp_bindx

    也允許混合位址族進行綁定,因為多宿主 SCTP socket 的第一個位址必須使用 bind 綁定,而其餘位址則使用 sctp_bindx 綁定。至少 Linux 支援新增混合系列的位址。讓 inet_set_faddress 函數即使在未定義 HAVE_SCTP 時也能使用,因為我們使用它來尋找用於綁定的位址,以便能夠混合 ipv4 和 ipv6 位址。感謝 Tomas Abrahamsson

    專屬 ID:OTP-10217

改進和新功能

  • 文件化 inet 選項:high_watermark、priority、linger 以及一些先前未文件化的其他選項。

    專屬 ID:OTP-10053

  • 從 inet 中移除 bit8 選項的支援

    專屬 ID:OTP-10056

  • 已更正磁碟記錄檔標頭的類型。(感謝 Niclas Eklund。)

    專屬 ID:OTP-10131

核心 2.15.1

已修正的錯誤和故障

  • 已更正驅動程式的輸出,因此大型二進位檔(> 4 GiB)的輸出現在不會靜默失敗或導致模擬器崩潰,而是輸出二進位檔或使呼叫失敗。這表示現在可以將 > 4 Gib 的二進位檔寫入檔案,但在例如 64 位元 Windows(其具有 32 位元的散布/收集 I/O 緩衝區段長度)上會失敗。未來可能會變更行為以始終寫入二進位檔,必要時可分部分寫入。

    專屬 ID:OTP-9820 輔助 ID:OTP-9795

  • erts:不必要條件的次要修正 erts:將 SENDFILE_CHUNK_SIZE 從帶符號變更為不帶符號(感謝 jovi zhang)

    專屬 ID:OTP-9872

  • 已更正 gen_sctp 中的兩個契約。

    專屬 ID:OTP-9874

  • 如果程序呼叫具有正在執行的 on_load 處理常式的模組,則該程序應該暫停。但是,如果具有 on_load 處理常式的模組是使用 code:load_binary/3 載入的,則呼叫會因 undef 例外而失敗。

    專屬 ID:OTP-9875

  • 如果 Cookie 建立失敗,現在會傳回檔案名稱和錯誤原因。(感謝 Magnus Henoch)

    專屬 ID:OTP-9954

  • 修正將無效資料傳遞至 compress,uncompress,zip,unzip,gzip,gunzip 時,zlib 中的連接埠洩漏。

    專屬 ID:OTP-9981

  • 更正 global、error_logger、etop、lists、ets 和 supervisor 模組的文件,以及 c_portdriver 和 kernel_app 文件中的各種拼寫錯誤。(感謝 Ricardo Catalinas Jiménez)

    專屬 ID:OTP-9987

  • 修正連接埠耗盡時,從 gen_tcp:accept/1,2 傳回的錯誤。

    由於 Posix ENFILE errno 值具有明確定義的含義,且與 Erlang 連接埠無關,因此 {error, enfile} 傳回值會產生嚴重的誤導和混淆。此修正將傳回值變更為 {error, system_limit},這與例如各種 file(3) 函數一致。inet:format_error/1 也已更新,以支援 system_limit,其方式與 file:format_error/1 相同。(感謝 Per Hedeland)

    專屬 ID:OTP-9990

  • 已更正 erts_debug:size/1,以將函式的環境中的共享納入考量。對於函式,它過去總是給出與 erts_debug:flat_size/1 相同的結果。

    專屬 ID:OTP-9991

  • 在某些情況下,當執行 file:sendfile 的程序在傳送檔案時當機時,efile_drv 程式碼不會正確地自行清除。現在已修正此問題。

    專屬 ID:OTP-9993

  • 在基於 BSD 的平台上,file:sendfile 在傳送大型檔案時有時會進入無限迴圈。現在已修正此問題。

    專屬 ID:OTP-9994

  • 雖然 disk_log 會積極收集已記錄的詞彙以獲得更好的效能,但收集太多資料可能會阻塞系統並導致寫入大型二進位檔。

    此問題已在 OTP-9764 中解決,但並非所有情況都獲得改善。

    (感謝 Richard Carlsson。)

    專屬 ID:OTP-9999 輔助 ID:OTP-9764

  • .app 檔案的文件不正確地表示 mod 參數的預設值為 undefined。現在已更正為 []

    專屬 ID:OTP-10002

核心 2.15

已修正的錯誤和故障

  • 已將對 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

  • 為 TCP socket 和 erlang:decode_packet 的 HTTP 封包剖析,遵循選項 packet_size。這使得可以接受大於預設設定的 HTTP 標頭,並且也可以藉由僅接受長度達到您希望允許的行的限制,來避免 DoS 攻擊。為了保持一致性,封包類型 line 也遵循選項 packet_size。(感謝 Steve Vinoski)

    專屬 ID:OTP-9389

  • disk_log:reopen/2,3disk_log:breopen/3 可能會從 file:rename/2 傳回錯誤原因,而不是原因 {file_error, Filename, Reason}。此錯誤已修正。

    根據文件,當截斷或重新開啟磁碟記錄檔失敗時傳送的訊息 {disk_log, Node, {error, disk_log_stopped}} 有時會變成回覆。此錯誤已修正。

    * 可能的不相容性 *

    專屬 ID:OTP-9508

  • 環境變數 'shutdown_timeout' 已新增至核心應用程式。先前,如果應用程式頂層監督程式在關閉請求時未終止,則應用程式控制器會永遠掛起。如果此新的環境變數設定為正整數 T,則應用程式控制器現在將在 T 毫秒後放棄,並改為強行終止應用程式。為了向後相容,shutdown_timeout 的預設值為 'infinity'。

    專屬 ID:OTP-9540

  • 在 stdlib 的行為中新增 '-callback' 屬性

    將 stdlib 行為中的 behaviour_info(callbacks) 匯出,替換為所有回呼的 '-callback' 屬性。更新文件,其中包含有關回呼屬性的資訊 從 '-callback' 屬性自動產生 'behaviour_info' 函數

    'behaviour_info(callbacks)' 是一個特殊函數,定義於描述行為的模組中,並傳回其回呼的清單。

    現在使用 '-callback' 規格自動產生此函數。如果使用者同時定義 '-callback' 屬性和 behaviour_info/1 函數,則 lint 會傳回錯誤。如果回呼不需要任何類型資訊,請使用其泛型規格。將 '-callback' 屬性新增至語言語法

    行為可以使用熟悉規格語法為其回呼定義規格,並將 '-spec' 關鍵字替換為 '-callback'。執行簡單的 lint 檢查以確保未重複定義任何回呼,且宣告所有參考的類型。

    然後,工具可以使用這些屬性來為行為提供文件,或尋找回呼模組中回呼定義的差異。

    將回呼規格新增至核心中的 'application' 模組,遵循網際網路文件將回呼規格新增至 tftp 模組,根據可能已棄用的註解將回呼規格新增至 inets_service 模組

    專屬 ID:OTP-9621

  • 使 Tab 鍵完成在遠端 Shell 中運作(感謝 Mats Cronqvist)

    專屬 ID:OTP-9673

  • 在 heart 文件中新增遺失的括號。

    在「參考手冊」的分散式區段中新增遺失的空格。

    在文件的 HTML 版本中,這些空格是分隔這些單字所必需的。

    專屬 ID:OTP-9693

  • 修正 net_kernel:get_net_ticktime() 文件

    新增傳回 `ignored` 時遺失的描述。(感謝 Ricardo Catalinas Jiménez)

    專屬 ID:OTP-9713

  • 雖然 disk_log 會積極收集已記錄的詞彙以獲得更好的效能,但收集太多資料可能會阻塞系統並導致寫入大型二進位檔。為了補救這種情況,已對寫入磁碟之前收集的資料量設定(小的)限制。

    專屬 ID:OTP-9764

    • 更正 application 模組中的回呼規格
    • 細化有關具有額外範圍的回呼規格的警告
    • 清除 autoimport 編譯器指示詞
    • 修正 typer 中的 Dialyzer 警告
    • 修正 Dialyzer 針對其自身程式碼的警告
    • 修正 Dialyzer 行為分析中的錯誤
    • 修正 Dialyzer 中的當機
    • 變數替換未概括任何未知變數。

    專屬 ID:OTP-9776

  • 修正使用無效日期呼叫 file:change_time/2,3 時的當機問題

    使用無效日期元組(例如 file:change_time("file.txt", {undefined, undefined})) 呼叫 file:change_time/2,3 將導致 file_server_2 當機。error_logger 會關閉,而整個 VM 將停止。變更行為以驗證系統邊界上給定的日期。(亦即在發出伺服器呼叫之前)。(感謝 Ahmed Omar)

    專屬 ID:OTP-9785

改進和新功能

  • 現在可以將選項清單引數傳遞至 file:read_file_info/2, file:read_link_info/2file:write_file_info/3,並在呼叫中設定時間類型資訊。有效的選項為 {time, local}, {time, universal}{time, posix}。對於 posix 時間,不會進行任何轉換,這會使操作速度更快一些。

    專屬 ID:OTP-7687

  • file:list_dir/1,2 現在會使用來自 efile 驅動程式的檔案名稱填滿整個緩衝區,然後再將其傳送到 erlang 程序。在大多數情況下,這會加快此檔案操作的速度。

    專屬 ID:OTP-9023

  • 如果 SCTP 不受支援,gen_sctp:open/0-2 現在可能會傳回 {error,eprotonosupport}

    已實作 gen_sctp:peeloff/1,並建立一對一 socket,現在也支援此 socket

    * 可能的不相容性 *

    專屬 ID:OTP-9239

  • 已將 sendfile 加入檔案模組的 API。sendfile/2 用於從檔案讀取資料,並在作業系統支援的情況下,使用零複製機制將資料傳送到 TCP socket。

    感謝 Tuncer Ayaz 和 Steve Vinovski 最初的實作。

    內部編號:OTP-9240

  • Tuple funs (包含模組名稱和函數的雙元素 tuple) 現在已正式宣告棄用,將在 R16 版本中移除。請改用 'fun M:F/A'。為了讓您知道您的系統正在使用 tuple funs,當第一次套用 tuple fun 時,將會發送警告到錯誤記錄器。

    內部編號:OTP-9649

Kernel 2.14.5

修正錯誤和故障

  • 修正 gen_tcp:send/2 和 gen_udp:send/4 的 Packet 參數類型

    該類型標記為 binary() 或 string(),但實際上可以是 iodata()。已更新測試套件以確認 gen_tcp/2 和 gen_udp:send/4 函數接受 iodata() (iolists) 封包。(感謝 Filipe David Manana)

    內部編號:OTP-9514

  • 已修正 XML 檔案。

    內部編號:OTP-9550 輔助編號:OTP-9541

改進和新功能

  • 已改進 inet 模組的類型和規範。

    內部編號:OTP-9260

  • 已加入類型和規範。

    內部編號:OTP-9356

  • 已改進 STDLIB 和 Kernel 中的合約,並修正了類型錯誤。

    內部編號:OTP-9485

  • 更新部分 zlib 函數的文件和規範。

    內部編號:OTP-9506

Kernel 2.14.4

修正錯誤和故障

  • gen_tcp 中的 send_timeout 選項在 active 模式或 {active,once} 選項下無法正常運作。現在已修正此問題。

    內部編號:OTP-9145

  • 修正了文件中各種錯字 (感謝 Tuncer Ayaz)

    內部編號:OTP-9154

  • 修正 rpc:pmap/3 文件中的錯字 (感謝 Ricardo Catalinas Jiménez)

    內部編號:OTP-9168

  • 已修正專用 DNS 解析器 inet_res 中的錯誤。時間點不佳的延遲回覆可能導致執行階段例外。同時進行了一些程式碼清理和改進。感謝 Evegeniy Khramtsov 針對錯誤回報和錯誤修正測試的精確指出。

    內部編號:OTP-9221 輔助編號:OTP-8712

改進和新功能

  • 已加入類型和規範。

    內部編號:OTP-9268

  • Erlang 類型和規範用於文件編寫。

    內部編號:OTP-9272

  • 已修改兩個在執行 Dialyzer 時可能導致警告的不透明類型。

    內部編號:OTP-9337

Kernel 2.14.3

修正錯誤和故障

  • os:find_executable/{1,2} 將不再傳回剛好在 PATH 中的目錄路徑。

    內部編號:OTP-8983 輔助編號:seq11749

  • 修正 file:write_file/3 的 -spec

    將第二個參數的類型從 binary() 變更為 iodata(),因為該函數明確接受清單和二進制。(感謝 Magnus Henoch)。

    內部編號:OTP-9067

  • 清理 code 模組的規格

    將 unicode_binary() 加入 file:filename() 類型後,dialyzer 開始抱怨 'code' 模組中某些函數的錯誤或不完整規格。罪魁禍首是 erl_bif_types 中這個模組的函數硬式編碼資訊,這些資訊未更新。由於這些函數現在有適當的規格,而且程式碼重複 (雙關語) 絕不是一個好主意,因此已從 erl_bif_types 中移除其類型資訊。

    在執行此操作時,已修正 code 模組中的一些錯誤註解,並確保程式碼現在執行時即使使用 -Wunmatched_returns 選項也不會出現 dialyzer 警告。

    也對 erl_bif_types 進行了一些清理。

    內部編號:OTP-9100

  • - 為不傳回的函數加入 spec - 加強 spec - 引入類型以避免規格中的重複 - 為不傳回的函數加入 spec - 為行為回呼加入 spec - 簡化兩個規格

    內部編號:OTP-9127

Kernel 2.14.2

改進和新功能

  • Erlang VM 現在支援 Unicode 檔案名稱。在強制使用 Unicode 檔案名稱的系統 (Windows 和 MacOSX) 上,此功能預設為開啟,但可以使用 '+fnu' 模擬器選項在其他系統上啟用。在預設不啟用此功能的系統上啟用 Unicode 檔案名稱功能被視為實驗性功能,不應用於生產環境。除了 Unicode 檔案名稱支援之外,還引入了「原始檔案名稱」的概念,這表示在沒有隱式 Unicode 編碼轉換的情況下提供的檔案名稱。原始檔案名稱以二進制形式提供,而不是清單形式。如需更多資訊,請參閱 stdlib 使用者指南和有關在 Erlang 中使用 Unicode 的章節。另請參閱檔案模組手冊頁面。

    * 可能的不相容性 *

    內部編號:OTP-8887

  • 現在有一個新的函數 inet:getifaddrs/0,其模型基於 BSD 和 LInux 上的 C 程式庫函數 getifaddrs(),用於報告主機上現有的介面及其位址。這取代了未記載且不受支援的 inet:getiflist/0 和 inet:ifget/2。

    內部編號:OTP-8926

Kernel 2.14.1.1

修正錯誤和故障

  • 在嵌入式模式中,呼叫 code:priv_dir/1code 中其他函數的 on_load 處理常式會導致系統凍結。由於 crypto 應用程式現在包含一個呼叫 code:priv_dir/1 的 on_loader 處理常式,因此在開機檔案中包含 crypto 應用程式會阻止系統啟動。

    也擴充了 -init_debug 選項,以列印有關正在執行的 on_load 處理常式的資訊,以方便偵錯。

    內部編號:OTP-8902 輔助編號:seq11703

Kernel 2.14.1

修正錯誤和故障

  • 已修正:inet:setopts(S, [{linger,{true,2}}]) 針對 SCTP socket 傳回 {error,einval}。inet_drv 在檢查選項大小時有錯誤。

    內部編號:OTP-8726 輔助編號:seq11617

  • gen_udp:connect/3 在啟用 SCTP 的組建中已損壞。它沒有像應該的那樣偵測到遠端終端錯誤。

    內部編號:OTP-8729

  • 文件中的 reference() 已取代為 ref()。

    內部編號:OTP-8733

  • 已修正 kernel-2.13.5.3 中引入的錯誤。如果在 TransitionPerod 內兩次執行 net_kernel:set_net_ticktime/1,則第二次呼叫會導致 net_kernel 程序因 badmatch 而當機。

    內部編號:OTP-8787 輔助編號:seq11657, OTP-8643

  • SCTP sctp_default_send_param 的 inet:getsockopt 有一個錯誤,不會初始化所需的欄位,導致隨機回應。現在已修正此問題。

    內部編號:OTP-8795 輔助編號:seq11655

  • 對於 HTTP 封包模式中的 socket,如果標頭中發生錯誤,則 gen_tcp:recv/2,3 的傳回值將為 {ok,{http_error,String}} 而不是 {error,{http_error,String}},以與 ssl:recv/2,3 一致。

    * 可能的不相容性 *

    內部編號:OTP-8831

改進和新功能

  • 即使使用 --enable-native-libs 設定 Erlang,也不會載入非常早期載入的模組 (例如 lists) 的原生程式碼。此問題已修正。(感謝 Paul Guyot。)

    內部編號:OTP-8750

  • 未記載的函數 inet:ifget/2 已改進為在支援 getaddrinfo() 的平台 (例如 BSD unix) 上傳回介面硬體位址 (MAC)。請注意,它仍然不適用於所有平台,例如不適用於 Windows 或 Solaris,因此該函數仍然未記載。

    也修正了 inet:ifget/2 和 inet:getservbyname/2 的緩衝區溢位和欄位初始化錯誤。

    感謝 Michael Santos。

    內部編號:OTP-8816

  • 為了改善可用性,如果位址參數或 'ip' 選項包含 IPv6 位址 (8-tuple),則 gen_tcp:listen/2、gen_tcp:connect/3-4、gen_udp:open/2 和 gen_sctp:open/1-2 函數的 'inet6' 選項現在是隱含的。

    內部編號:OTP-8822

Kernel 2.14

修正錯誤和故障

  • os:find_executable 現在可以輸入 Windows 上可執行檔的完整名稱,並且仍然可以找到它。也就是說,os:find_executable("werl.exe") 的運作方式將與 os:find_executable("werl") 相同。

    內部編號:OTP-3626

  • 已改進 shell 的行編輯,使其更類似於 readline 和其他 shell 的行為。(感謝 Dave Peticolas)

    內部編號:OTP-8635

  • 在某些情況下,網路核心可能會凍結。(感謝 Scott Lystig Fritchie。)

    內部編號:OTP-8643 輔助編號:seq11584

  • 如果無法剖析 DNS 回覆,或如果解析器導致 noconnection 類型錯誤,則核心 DNS 解析器會洩漏一兩個連接埠。錯誤現在已修正。同時也修正了觸發連接埠洩漏錯誤的 DNS 規格界線截斷回覆。

    內部編號:OTP-8652

改進和新功能

  • 從此版本開始,全域名稱伺服器不再支援執行 Erlang/OTP R11B 的節點。

    內部編號:OTP-8527

  • 檔案模組的函數 write、read 和 read_line 現在可以正確處理類似 'standard_io' 和 'standard_error' 的具名 io_servers。

    內部編號:OTP-8611

  • 已加入函數 file:advise/4 和 file:datasync/1。(感謝 Filipe David Manana。)

    內部編號:OTP-8637

  • 在節點之間交換群組時,pg2 沒有移除重複的成員。此錯誤是在 R13B03 (kernel-2.13.4) 中引入的。

    內部編號:OTP-8653

  • file:open/2 有一個新的 'exclusive' 選項,該選項會在支援的情況下使用 OS O_EXCL 旗標以獨佔模式開啟檔案。

    內部編號:OTP-8670

Kernel 2.13.5.3

修正錯誤和故障

  • 已修正 Kernel 2.13.5.2 中引入的錯誤。

    內部編號:OTP-8686 輔助編號:OTP-8643

Kernel 2.13.5.2

修正錯誤和故障

  • 在某些情況下,網路核心可能會凍結。(感謝 Scott Lystig Fritchie。)

    內部編號:OTP-8643 輔助編號:seq11584

Kernel 2.13.5.1

修正的錯誤與故障

  • os:cmd/1 中的競爭條件可能導致呼叫者永遠卡在 os:cmd/1 中。

    內部 ID:OTP-8502

Kernel 2.13.5

修正的錯誤與故障

  • 已修正影響 pg2:get_local_members/1 的競爭錯誤。此錯誤是在 R13B03 中引入的。

    內部 ID:OTP-8358

  • 在 SMP 模擬器中,原生程式碼的載入並非完全原子操作,這可能會導致崩潰。此外,原生程式碼的每個 MFA 資訊表現在已使用鎖定保護,因為它在 SMP 模擬器中可能會被同時存取。(感謝 Mikael Pettersson。)

    內部 ID:OTP-8397

  • 已更新 user.erl(在舊的 shell 中使用),以處理提示字串中的 Unicode(io:get_line/{1,2})。io_lib 也已更新,以使用 't' 修飾符格式化提示(即 ~ts 而不是 ~s)。

    內部 ID:OTP-8418 輔助 ID:OTP-8393

  • 如果作業系統原生解析器配置錯誤,則解析器常式無法將自己的節點名稱查找為主機名稱,此錯誤由 Yogish Baliga 回報,現已修復。

    現在,解析器常式會嘗試將主機名稱解析為 IP 字串,就像大多數作業系統解析器一樣,除非使用原生解析器。

    DNS 解析器 inet_res 和檔案解析器 inet_hosts 現在只有在需要時才會讀取作業系統設定檔。由於預設使用原生解析器,因此在大多數情況下永遠不需要它們。

    如果沒有 'search' 關鍵字,DNS 解析器自動更新作業系統設定檔資料 (/etc/resolv.conf) 時,現在會使用 'domain' 關鍵字作為預設搜尋網域。

    內部 ID:OTP-8426 輔助 ID:OTP-8381

改進和新功能

  • 已變更 on_load 函數的預期傳回值。(請參閱參考手冊中關於程式碼載入的部分。)

    * 可能的不相容性 *

    內部 ID:OTP-8339

  • 現在,封存檔案中的明確頂層目錄為選用。

    例如,如果封存檔(app-vsn.ez)只包含 app-vsn/ebin/mod.beam 檔案,則會使用封存檔的檔案資訊作為來源,偽造 app-vsn 和 app-vsn/ebin 目錄的檔案資訊。也可以列出虛擬目錄。簡而言之,如果頂層目錄不存在,則為虛擬目錄。

    內部 ID:OTP-8387

  • code:clash/0 現在會查看封存檔(.ez 檔案)內部。(感謝 Tuncer Ayaz。)

    內部 ID:OTP-8413

  • 有新的 gen_sctp:connect_init/* 函數,可在不阻塞等待結果的情況下啟動 SCTP 連線。結果會以 sctp_assoc_change 事件的形式非同步傳遞。(感謝 Simon Cornish。)

    內部 ID:OTP-8414

Kernel 2.13.4

修正的錯誤與故障

  • 已修正 m:pg2 中的連結。(感謝 Christophe Romain。)

    內部 ID:OTP-8198

  • ticker 處理序可能會因為嘗試向沒有回應的節點傳送 tick 而無限期阻塞。如果發生這種情況,連線將不會像預期的那樣斷開。

    內部 ID:OTP-8218

  • 已修正 pg2 中當成員死亡時未離開處理序群組的錯誤。(感謝 Matthew Dempsky。)

    內部 ID:OTP-8259

改進和新功能

  • 現在使用大多數平台上存在的開源工具(xsltproc 和 fop)建置文件。一個明顯的變化是移除了框架。

    內部 ID:OTP-8201

  • 封存檔案中的頂層目錄不再需要有 -vsn 後綴。例如,如果封存檔的名稱類似 mnesia-4.4.7.ez,則封存檔中的頂層目錄可以命名為 mnesiamnesia-4.4.7。如果封存檔的名稱類似 mnesia.ez,則封存檔中的頂層目錄必須像先前一樣命名為 mnesia

    內部 ID:OTP-8266

  • 可以使用 -on_load() 指令在載入模組時執行函數。它記錄在參考手冊中關於程式碼載入的部分中。

    內部 ID:OTP-8295

Kernel 2.13.3

改進和新功能

  • 已重寫、記錄並發布 DNS 解析器客戶端 inet_res。請參閱 inet_res(3) 和 Erts 使用者指南:Inet 設定。

    從形式上來說,它與先前的版本不相容,因為沒有先前的官方版本。然而,它之前被使用過,並且某些細節已經發生變化。

    現在,無論節點在何種分發模式下啟動,設定都會從所有 Unix 平台上的 /etc/resolv.conf 和 /etc/hosts 初始化。這些檔案應該駐留的目錄 (/etc) 可以透過環境變數變更。這些設定檔位置也可以在 inet 設定中變更。這些檔案會被監控是否有變更並重新讀取,這會使一些解析器設定變數超出應用程式的控制範圍。現在 /etc/hosts 條目有自己的快取表,該表會被應用程式設定的主機條目遮蔽(如果使用查找方法 'file')。這個問題(inet_res 設定僅適用於分發模式長名稱)是多年前 Matthew O'Gorman 回報的問題之一。

    預設情況下,查找方法仍然只有 'native'。在所有 Unix 平台上進行解析器設定,只是為了獲得可直接呼叫 inet_res 的可用設定。

    不再建議使用函數 inet_res:nslookup/3..5inet_res:nnslookup/4..4,而是使用 inet_res:lookup/3..5inet_res:resolve/3..5,它們提供更清晰的引數類型,並且可以在呼叫中覆寫選項。

    先前不受支援的 inet_res 版本的使用者已包含內部標頭檔,以便存取內部記錄定義以檢查 DNS 回覆。這仍然是不受支援的,並且在 inet_dns 中有可用的存取函數。這些函數記錄在 inet_res(3) 中。

    錯誤修正:壓縮參考迴圈會使 DNS 訊息解碼永遠循環。此問題由 Florian Weimer 回報。

    Sergei Golovan 的錯誤修正和修補程式建議:配置 IPv6 名稱伺服器無效。他的修補程式(正如他警告的那樣)建立了許多 UDP socket;每個名稱伺服器一個。這已在發布的版本中修正。

    改進:inet_res 現在具有 EDNS0 功能。目前實作很簡單,並且不會探測和快取名稱伺服器的 EDNS 資訊,完全具備功能的實作應該這樣做。必須透過解析器設定啟用 EDNS,如果名稱伺服器回覆它不支援 EDNS,inet_res 會回退到一般 DNS 查詢。

    改進:現在,如果從名稱伺服器收到截斷的回覆,inet_res 會自動回退到 TCP。

    警告:inet_resinet_dns 處理的某些古老且奇特的記錄類型不受目前 BIND 版本支援,因此在重寫後無法在合理的努力下進行測試,例如 MD、MF、NULL 和 SPF。這些特定記錄中出現錯誤的風險仍然很低,因為它們的程式碼大多與其他經過測試的記錄類型共用。

    * 可能的不相容性 *

    內部 ID:OTP-7955 輔助 ID:OTP-7107 OTP-6852

  • 如果 TCP socket 使用選項 {packet,4} 收到具有非常大尺寸值(>2Gb)的封包標頭,則可能會使模擬器崩潰。同樣的錯誤會導致 erlang:decode_packet/3 傳回錯誤的值。(感謝 Georgos Seganos。)

    內部 ID:OTP-8102

  • 檔案模組現在有一個類似於 io:get_line/2 的 read_line/1 函數,但具有位元組導向語意。函數 file:read_line/1 也適用於原始檔案,但為了獲得良好的效能,建議將其與原始檔案存取的 'read_ahead' 選項一起使用。

    內部 ID:OTP-8108

Kernel 2.13.2

修正的錯誤與故障

  • 修正了從以 latin1 以外的編碼開啟的檔案執行 io:get_line(以及其他呼叫)時發生的錯誤,該錯誤會導致出現錯誤的 Unicode 錯誤。

    內部 ID:OTP-7974

改進和新功能

  • 新增了從系統取得更高解析度時間戳記的功能。erlang:now 函數傳回的時間戳記並不總是與實際作業系統時間一致(因為它可以抵抗作業系統中的大型時間變更)。新增函數 os:timestamp/0 是為了取得與 erlang:now 傳回的類似時間戳記,但不受 Erlang 時間修正和平滑演算法的影響。os:timestamp 傳回的時間戳記始終與作業系統的時間觀點一致,就像用於取得實際時間的日曆函數一樣,但具有更高的解析度。使用範例可以在 os 手冊頁中找到。

    內部 ID:OTP-7971

Kernel 2.13.1

修正的錯誤與故障

  • os:cmd/1 的多個並行呼叫一次只會阻塞一個排程器執行緒,如果作業系統分叉處理序速度較慢,則會使 smp 模擬器反應更快。

    內部 ID:OTP-7890 輔助 ID:seq11219

  • 修正了節點啟動期間執行 IO 操作的早期 RPC 掛起問題。

    內部 ID:OTP-7903 輔助 ID:seq11224

  • 已修正 gen_tcp 和 gen_udp 的錯誤行為。對於衝突的目的位址與 socket 位址系列,gen_tcp:connect/3,4 和 gen_udp:send/4 現在會傳回 {error,eafnosupport}。對於結合不使用原生 (OS) 解析器(不是預設值)的 IP 位址字串主機名稱的其他邊緣情況,也已變更為傳回 {error,nxdomain} 而不是 {error,einval}。這些變更可能會讓舊的現有程式碼感到意外。對於衝突的本機位址與 socket 位址系列,gen_tcp:listen/2 和 gen_udp:open/2 現在會失敗,而不是嘗試使用錯誤的位址。此問題由 Per Hedeland 回報。

    * 可能的不相容性 *

    內部 ID:OTP-7929

改進和新功能

  • 已修正 R13A 中 Unicode 和 I/O 系統實作中的多個故障和效能問題。

    內部 ID:OTP-7896 輔助 ID:OTP-7648 OTP-7887

  • 現在已改進不受支援的 DNS 解析器用戶端 inet_res,以處理 NAPTR 查詢。

    內部 ID:OTP-7925 輔助 ID:seq11231

Kernel 2.13

修正的錯誤與故障

  • 已修正舊的 Erlang DNS 解析器 inet_res,以處理具有多個字元字串的 TXT 記錄。此修補程式由 Geoff Cant 提供。

    內部 ID:OTP-7588

  • 當區塊讀取以唯讀模式開啟的磁碟記錄時,錯誤的詞彙可能會導致磁碟記錄處理序崩潰。

    內部 ID:OTP-7641 輔助 ID:seq11090

  • 有時(僅在 Solaris 上觀察到),gen_tcp:send() 會回傳 {error,enotconn},而不是預期的 {error,closed},因為對等 socket 已被明確關閉。

    自有 ID:OTP-7647

  • 在 inet 驅動程式中,gen_sctp 選項 sctp_peer_addr_params,#sctp_paddrparams{address={IP,Port} 被錯誤地解碼。此錯誤現已更正。

    自有 ID:OTP-7755

改進和新功能

  • 現在,Erlang 程式可以使用 io_server 的 'standard_error' 來存取具有檔案描述符的平台上的 STDERR,例如:io:format(standard_error,"~s~n",[ErrorMessage]),

    自有 ID:OTP-6688

  • erlang:system_info(system_version) 回傳的字串格式(以及 Erlang 啟動時的第一個訊息)已變更。現在,字串同時包含 OTP 版本號碼和 erts 版本號碼。

    自有 ID:OTP-7649

  • 從此版本開始,全域名稱伺服器不再支援執行 Erlang/OTP R10B 的節點。

    自有 ID:OTP-7661

  • net_kernel:monitor_nodes/X 功能傳遞的 {nodedown, Node} 訊息,現在保證會在 Nodeerlang:nodes/Y 回傳的結果中移除後才被傳送。

    自有 ID:OTP-7725

  • 已移除已棄用的函式 erlang:fault/1erlang:fault/2file:rawopen/2

    * 可能的不相容性 *

    自有 ID:OTP-7812

  • 藉由新的環境變數設定 ERL_EPMD_PORT,屬於不同獨立叢集的節點現在可以在同一主機上共存。

    自有 ID:OTP-7826

  • 已更新版權聲明。

    自有 ID:OTP-7851

核心 2.12.5.1

已修正的錯誤和故障

  • 當區塊讀取以唯讀模式開啟的磁碟記錄時,錯誤的詞彙可能會導致磁碟記錄處理序崩潰。

    內部 ID:OTP-7641 輔助 ID:seq11090

  • 從多個程序在具有選項 send_timeout 的 socket 上呼叫 gen_tcp:send(),可能會導致比指定時間長得多的逾時。解決方案是一個新的 socket 選項 {send_timeout_close,true},它會在逾時時自動關閉連線。後續對 send 的呼叫將因連線關閉而立即失敗。

    自有 ID:OTP-7731,輔助 ID:seq11161

核心 2.12.5

已修正的錯誤和故障

  • 已更正 rpc:pmap/3 的文件。(感謝 Kirill Zaborski。)

    自有 ID:OTP-7537

  • 用於分散式 Erlang 通訊協定的監聽 socket 現在使用 socket 選項 'reuseaddr',當您使用核心選項 'inet_dist_listen_min' 和 'inet_dist_listen_max' 強制監聽埠號碼,並重新啟動具有開啟連線的節點時,此選項非常有用。

    自有 ID:OTP-7563

  • 已修正未關閉 TCP 埠的記憶體洩漏問題。在某些情況下,gen_tcp:send() 後接失敗的 gen_tcp:recv() 可能會導致埠在關閉後仍然存在。

    自有 ID:OTP-7615

改進和新功能

  • 使用 proc_lib 產生的程序(包括使用 proc_libgen_server 和其他函式庫模組)不再保留初始呼叫的完整引數清單,而只保留元數。

    此外,如果使用 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

  • 從標準輸入讀取時,io:get_line/1 現在速度大幅提升。從以二進位模式開啟的任何檔案讀取時,io:get_line/1 也有一些小的效能改進。(感謝 Fredrik Svahn。)

    自有 ID:OTP-7542

  • 現在實驗性支援從封存檔案載入程式碼。如需更多資訊,請參閱 codeiniterl_prim_loaderescript 的文件。

    已改善 escripts 的錯誤處理。

    escript 現在可以為模擬器設定明確的引數,例如 -smp enabled

    escript 現在可以包含預編譯的 beam 檔案。

    escript 現在可以包含包含一個或多個應用程式的封存檔案(實驗性)。

    已移除內部模組 code_aux

    自有 ID:OTP-7548,輔助 ID:otp-6622

  • 現在已記錄 code:is_sticky/1。(感謝 Vlad Dumitrescu。)

    自有 ID:OTP-7561

  • 在工作控制模式下,「s」和「r」命令現在接受選擇性引數,以指定要啟動哪個 shell。(感謝 Robert Virding。)

    自有 ID:OTP-7617

  • 如果在未以 -sname-name 選項啟動的模擬器中呼叫 net_adm:world/0,1,則可能會損毀;現在它將回傳一個空清單。(感謝 Edwin Fine。)

    自有 ID:OTP-7618

核心 2.12.4

已修正的錯誤和故障

  • 現在在 Windows 上可以處理大型檔案,如果檔案系統支援的話。

    自有 ID:OTP-7410

改進和新功能

  • 新的 BIF erlang:decode_packet/3,可從二進位檔中提取通訊協定封包。類似於 socket 選項 {packet, Type}。也記錄了 socket 封包類型 http,並使其成為官方類型。注意:從活動 socket 傳送的 http 封包的元組格式已變更,且不相容。

    * 可能的不相容性 *

    自有 ID:OTP-7404

  • 現在已對 socket 設定 {active,once} 進行特殊最佳化(使用 inets:setopts/2),因為 {active,once} 選項通常比其他選項更頻繁地使用。

    自有 ID:OTP-7520

核心 2.12.3

已修正的錯誤和故障

  • 現在 gen_sctp 會處理 SCTP_ADDR_CONFIRMED 事件。

    自有 ID:OTP-7276

  • 當使用 pg2:leave/2 離開程序群組時,會錯誤地假設該程序是群組的成員。此錯誤已修正。

    自有 ID:OTP-7277

  • 在 Erlang shell 中,使用向上和向下箭頭鍵時,有時會擷取到錯誤的上一個命令。

    自有 ID:OTP-7278

  • 已更正 erlang:trace/3 的文件。

    自有 ID:OTP-7279,輔助 ID:seq10927

  • 在 SMP 模擬器中,存在一個小風險,即 code:purge(Mod) 會終止在 Mod 中執行程式碼的程序,並在程序終止之前卸載模組 Mod。現在,code:purge(Mod) 會等待確認(使用 erlang:monitor/2)程序已終止,然後再繼續。

    自有 ID:OTP-7282

  • 當已解壓縮資料的大小剛好是內部緩衝區大小的倍數(預設為 4000 位元組)時,zlib:inflate 會失敗。

    自有 ID:OTP-7359

改進和新功能

  • 現在可以在環境變數 ERL_LIBS 中指定額外的函式庫目錄。請參閱 code 模組的手冊頁。(感謝 Serge Aleynikov。)

    自有 ID:OTP-6940

  • 已改進 crypto 和 zlib 驅動程式,以允許並行 SMP 存取。

    自有 ID:OTP-7262

  • 有一個新的函式 init:stop/1,可用於正常關閉系統,並產生非零的結束狀態或損毀傾印。(感謝 Magnus Froberg。)

    自有 ID:OTP-7308

  • 現在已記錄 open_port/2hide 選項。(感謝 Richard Carlsson。)

    自有 ID:OTP-7358

核心 2.12.2.1

改進和新功能

  • 現在 unix 平台上的 os:cmd/1 使用 /bin/sh 作為 shell,而不是在 PATH 環境中尋找 sh

    自有 ID:OTP-7283

核心 2.12.2

修正錯誤與故障

  • 修正了一個由於 disk_logpg2 之間競爭條件所導致的錯誤。

    自有 ID:OTP-7209 輔助 ID:seq10890

  • Beta 測試模組 gen_sctp 現在如文件所述支援主動模式。主動模式仍然未經充分測試,並且關於 gen_sctp:connect/5 的正確語義存在一些問題。特別是:它應該是阻塞的、非阻塞的還是可選擇的。在(近期)未來的修補程式中,它很有可能會更改語義。

    請嘗試使用,提供評論並發送錯誤報告!

    自有 ID:OTP-7225

改進與新功能

  • erlang:system_info/1 現在接受 logical_processorsdebug_compiled 引數。有關更多資訊,請參閱 erlang 文件。

    如果模擬器使用的排程器執行緒數量大於系統上的邏輯處理器數量,則 test_server:timetrap_scale_factor/0 傳回的比例因子現在也會受到影響。

    自有 ID:OTP-7175

  • 更新了 erlang:function_exported/3io:format/2 函數的文件,不再說明這些函數主要為了向後相容性而保留。

    自有 ID:OTP-7186

  • 執行 processes/0 BIF 的程序現在可以在執行期間被其他程序搶佔。這樣做是為了盡可能減少對系統其他部分的干擾。當然,傳回的結果仍然是在呼叫 processes/0 時存在的程序的一致快照。

    為了闡明現有程序與存活程序之間的區別,已更新 processes/0 BIF 和 is_process_alive/1 BIF 的文件。

    自有 ID:OTP-7213

  • 在文件中,已將 tuple_size/1byte_size/1 取代為 size/1

    自有 ID:OTP-7244

Kernel 2.12.1.2

改進與新功能

  • erlang:system_info/1 現在接受 {allocator_sizes, Alloc}alloc_util_allocators 引數。有關更多資訊,請參閱 erlang 文件。

    自有 ID:OTP-7167

Kernel 2.12.1.1

修正錯誤與故障

  • 修復了群組中可能導致 ssh 伺服器遺失答案或掛起的問題。

    自有 ID:OTP-7185 輔助 ID:seq10871

Kernel 2.12.1

修正錯誤與故障

  • file:read/2 和 file:consult_stream/1,3 在 I/O 裝置上未使用空提示字元。此錯誤現已更正。

    自有 ID:OTP-7013

  • 已更新 sctp 驅動程式,以針對使用 API 拼字變更 adaption -> adaptation 的較新 lksctp 套件(例如 1.0.7)運作。舊版 lksctp (1.0.6) 仍然可以運作。無論底層 C API 如何,gen_sctp.erl 和 inet_sctp.hrl 中的 Erlang API 現在都拼寫為「adaptation」。

    * 可能的不相容性 *

    自有 ID:OTP-7120

改進與新功能

  • 已更新文件,以反映 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

Kernel 2.12

修正錯誤與故障

  • 修正了讀取 0 個位元組時,原始檔案會傳回 'eof' 而非空資料的錯誤。

    自有 ID:OTP-6291 輔助 ID:OTP-6967

  • 修正了 David Baird 回報的,以及 Dialyzer 發現的 gen_udp:fdopen 中的錯誤。

    自有 ID:OTP-6836 輔助 ID:OTP-6594

  • 多次呼叫 error_logger:tty(true) 不會產生多個錯誤日誌輸出。

    自有 ID:OTP-6884 輔助 ID:seq10767

  • 當使用了命令列旗標 -connect_all false 時,全域名稱伺服器現在會忽略 nodeup 訊息。(感謝 Trevor Woollacott。)

    自有 ID:OTP-6931

  • 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

  • 當實際堆疊和/或堆疊很大時,系統監視器功能產生的監視器訊息和垃圾收集追蹤訊息可能會包含錯誤的堆疊和/或堆疊大小。

    從 erts 版本 5.6 開始,已修改 erlang:system_monitor/[1,2]large_heap 選項。如果為所有堆疊世代配置的所有記憶體區塊的大小總和等於或大於指定的大小,則會傳送監視器訊息。先前,如果為最年輕世代配置的記憶體區塊等於或大於指定的大小,則會傳送監視器訊息。

    * 可能的不相容性 *

    自有 ID:OTP-6974 輔助 ID:seq10796

  • inet:getopts/2 在 Windows Vista 上傳回隨機值。

    自有 ID:OTP-7003

改進與新功能

  • 針對 file:pread/2 和 file:pread/3 進行了次要的文件更正。

    自有 ID:OTP-6853

  • 已移除已棄用的函數 file:file_info/1init:get_flag/1init:get_flags/0init:get_args/0

    * 可能的不相容性 *

    自有 ID:OTP-6886

  • Kernel 和 STDLIB 中模組的合約指令。

    自有 ID:OTP-6895

  • 新增了函數 io:columns/0、io:columns/1、io:rows/0 和 io:rows/1,以允許使用者取得終端幾何資訊。shell 在格式化輸出時會利用這點。對於高度和寬度不適用的常規檔案和其他 io 裝置,函數會傳回 {error,enotsup}。

    潛在不相容性:如果有人編寫了自訂 io 處理程式,則該處理程式必須傳回錯誤或處理有關終端高度和寬度的 io 要求。通常這沒有問題,因為根據經驗,io 處理程式在收到未知 io 要求時應傳回錯誤回覆,而不是當機。

    * 可能的不相容性 *

    自有 ID:OTP-6933

  • 已移除未記載且不受支援的函數 inet:ip_to_bytes/1inet:ip4_to_bytes/1inet:ip6_to_bytes/1inet:bytes_to_ip6/16

    自有 ID:OTP-6938

  • 將新的總和檢查碼組合函數新增至 zlib。並修正了 zlib:deflate 中的錯誤。感謝 Matthew Dempsky。

    自有 ID:OTP-6970

  • spawn_monitor/1spawn_monitor/3 BIF 現在已自動匯入(即,它們不再需要 erlang: 字首)。

    自有 ID:OTP-6975

  • 如果使用明顯錯誤的引數呼叫 code 模組中的所有函數,例如當預期為 atom 時使用 tuple,則這些函數現在將會產生例外。某些函數現在也會針對未記載的引數類型失敗(例如,ensure_loaded/1 現在如文件所述僅接受 atom;它過去也接受字串)。

    Dialyzer 通常會針對任何使用未記載引數類型的呼叫發出警告。即使呼叫在 R12B 中仍然有效,也應該更正您的程式碼。未來的版本將會遵循文件。

    * 可能的不相容性 *

    自有 ID:OTP-6983

Kernel 2.11.5.2

修正錯誤與故障

  • 如果網路通訊發生暫時性故障期間發出大量並行傳送,則核心參數 dist_auto_connect 有時可能會無法封鎖節點

    自有 ID:OTP-6893 輔助 ID:seq10753

Kernel 2.11.5.1

修正錯誤與故障

  • 已修改內部(很少使用)的 DNS 解析器,使其在要求解析絕對名稱時(以句點結尾的名稱)不使用網域搜尋清單。還有一個錯誤導致它為已修正的絕對名稱建立格式不正確的 DNS 查詢,由 Scott Lystig Fritchie 提出更正建議。程式碼也已更正為以與未快取相同的搜尋順序尋找快取的 RR,現在允許搜尋網域中包含根網域,並且現在實際上可以執行區域傳輸請求。

    * 可能的不相容性 *

    自有 ID:OTP-6806 輔助 ID:seq10714 EABln35459

  • 如果呼叫程序啟用了 trap_exit 旗標,則 zlib:close/1 會在訊息佇列中留下 EXIT 訊息。

    自有 ID:OTP-6811

改進與新功能

Kernel 2.11.5

修正錯誤與故障

  • shell 已更新以修正以下缺陷:如果未使用 oldshell,shell 程序結束後會使初始 shell 無回應。使用不存在的回呼模組啟動受限 shell 會導致 shell 無法使用任何命令,甚至無法使用 init:stop/0。當 restricted_shell 啟用時,Fun 無法用作本地 shell 函數(在 shell_default 或 user_default 中)的參數。

    自有 ID:OTP-6537

  • 在 R11B-4 中,未記錄的功能 gen_tcp:fdopen/2 已損壞。現在已再次修復。

    自有 ID:OTP-6615

  • 修正了 inet_res 模組中三個位置的計時器取消。(問題由 Dialyzer 發現。)

    自有 ID:OTP-6676

改進和新功能

  • 修正了 SCTP 的 socket 選項 SO_LINGER、SO_SNDBUF 和 SO_RCVBUF 的協定層錯誤。

    自有 ID:OTP-6625 輔助 ID:OTP-6336

  • 改進並記錄了對等連線關閉時 inet 選項 {active,once} 的行為。

    自有 ID:OTP-6681

  • 為連線導向的 socket 新增了 inet 選項 send_timeout,允許在將傳送請求傳遞給底層 TCP 堆疊時設定逾時。

    自有 ID:OTP-6684 輔助 ID:seq10637 OTP-6681

  • Makefile 的小幅變更。

    自有 ID:OTP-6689 輔助 ID:OTP-6742

  • 已更新 process_flag(priority, Level) 的文件,請參閱 erlang 文件。

    自有 ID:OTP-6715

Kernel 2.11.4.2

改進和新功能

  • process_flag/2 接受新的旗標 sensitive

    自有 ID:OTP-6592 輔助 ID:seq10555

Kernel 2.11.4.1

已修正的錯誤和故障

  • 已修正 gen_udp:open 中破壞 'fd' 選項的錯誤。

    自有 ID:OTP-6594 輔助 ID:seq10619

Kernel 2.11.4

已修正的錯誤和故障

  • error_logger 函數 error_msg/1,2warning_msg/1,2info_msg/1,2 的文件中新增了一個警告,說明使用錯誤的引數呼叫這些函數可能會導致標準事件處理常式崩潰。

    自有 ID:OTP-4575 輔助 ID:seq7693

  • 已修正 inet_db 中關於取得解析器選項 retry 的錯誤。

    自有 ID:OTP-6380 輔助 ID:seq10534

  • 透過呼叫 global:register_name()global:re_register_name() 註冊的名稱,在註冊或已註冊的程序終止時,並非總是會取消註冊。此錯誤已修正。

    自有 ID:OTP-6428

  • 當將核心組態參數 error_logger 設定為 false 時,文件指出「未安裝任何錯誤記錄處理常式」。這是真的,但錯誤記錄並未關閉,因為會保留初始的基本錯誤記錄事件處理常式,將原始事件訊息列印到 tty。

    變更此行為可以被視為不相容的向後變更。因此,為組態參數新增了一個新的值 silent,以確保完全關閉錯誤記錄。

    自有 ID:OTP-6445

  • 釐清了 code:lib_dir/1code:priv_dir/1 的文件。這些函數會遍歷程式碼路徑的名稱,它們不會搜尋實際的目錄。

    自有 ID:OTP-6466

  • 當僅使用 expand_fun 引數呼叫 io:setopts 時,會傳回 {error,badarg}。(感謝 igwan。)

    自有 ID:OTP-6508

改進和新功能

  • 已實作與 SCTP Socket API 擴充功能之間的介面。這是 Serge Aleynikov 和 Leonid Timochouk 提供的開放原始碼修補程式。Erlang 程式碼部分已由 OTP 團隊修改,稍微變更了 Erlang API。

    Erlang 介面包含模組 gen_sctp 和 include 檔案 -include_lib("kernel/include/inet_sctp.hrl").,用於選項記錄定義。gen_sctp 模組已記錄在案。

    在 OTP 團隊重寫之前,提供的開放原始碼修補程式是根據 http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13 撰寫的,並聲稱在 Linux Fedora Core 5.0(核心 2.6.15-2054 或更新版本)和 Solaris 10 及 11 上測試後運作良好。OTP 團隊的重寫使用了相同的標準文件,但可能意外地破壞了一些功能。如果是這樣,將很快修補為可運作狀態。C 語言的棘手部分和一般設計基本上沒有改變。在重寫期間,程式碼已在 SuSE Linux Enterprise Server 10 上進行手動測試,並在 Solaris 10 上簡短測試。非常感謝對程式碼和文件的回饋。

    SCTP 介面處於測試版狀態。它僅進行過手動測試,且 OTP 中沒有自動測試套件,這表示所有內容都未經過測試。Socket 主動模式已損壞。尚未測試 IPv6。文件已由於 API 變更而重新製作,但之後尚未校對。

    感謝 OTP 團隊 Serge Aleynikov 和 Leonid Timochouk 的寶貴貢獻。我們希望沒有把事情搞得太糟。

    自有 ID:OTP-6336

  • term_to_binary/2 現在可辨識 {minor_version,Version} 選項。與先前的編碼相比,{minor_version,1} 會以更精確且更節省空間的方式編碼浮點數。

    自有 ID:OTP-6434

  • 節點監控已改進。現在,以下屬性適用於 net_kernel:monitor_nodes/[1,2]

    • nodeup 訊息會在傳遞任何來自遠端節點的訊息之前,透過新建立的連線傳遞。
    • nodedown 訊息不會傳遞,直到透過連線傳遞的所有來自遠端節點的訊息都已傳遞為止。
    • 也可以在 net_kernel 伺服器啟動之前進行訂閱。

    自有 ID:OTP-6481

  • 現在允許以「原始」方式設定和取得 socket 選項。使用此功能必然會產生不可移植的程式碼,但允許在具有這些功能的 TCP 堆疊上設定和取得任意不常見的選項。

    自有 ID:OTP-6519

  • 已消除 Dialyzer 警告。

    自有 ID:OTP-6523

  • 已更新 file:delete/1file:set_cwd/1 的文件,以釐清如果輸入引數的類型不正確會發生什麼情況。

    自有 ID:OTP-6535

Kernel 2.11.3.1

已修正的錯誤和故障

  • 可能會將錯誤的封包大小用於透過兩個 Erlang 節點之間新建立的連線傳遞的第一個訊息。這可能會導致訊息被捨棄,或連線終止。

    自有 ID:OTP-6473

Kernel 2.11.3

已修正的錯誤和故障

  • 在 Unix 上,unix:cmd/1 函數可能會在呼叫程序的訊息佇列中留下 'EXIT' 訊息。在 SMP 模擬器中,更可能發生該問題。

    自有 ID:OTP-6368

改進和新功能

  • erl_ddll 中新增了更多介面,以支援不同的使用案例。

    自有 ID:OTP-6307 輔助 ID:OTP-6234

  • 透過呼叫 global:set_lock() 設定的鎖定,在鎖定程序終止時,並非總是會刪除。此錯誤已修正。

    自有 ID:OTP-6341 輔助 ID:seq10445

Kernel 2.11.2

已修正的錯誤和故障

  • 在 R11B-1 中,使用 he dist_auto_connect once 時,如果節點消失,行為會發生變更。現在,關於正常分散式操作的逾時已還原為舊版(R11B-1 之前)。

    自有 ID:OTP-6258 輔助 ID:OTP-6200, seq10449

  • 已消除 inet:gethostbyname() 函數所使用之內部程序的啟動問題。如果先前未啟動內部程序(inet_gethost_native),且如果多個程序同時呼叫 inet:gethostbyname() 函數之一,則呼叫可能會失敗。

    自有 ID:OTP-6286

改進和新功能

  • 程式碼清除:已移除舊的內部過時 file_server。它僅在與 R7 和更舊的節點通訊時使用。

    自有 ID:OTP-6245

  • 嘗試開啟不存在或格式錯誤的磁碟記錄檔不再會導致當機報告。特別是,當引數不是格式正確的磁碟記錄檔時,ets:file2tab/1 不會報告錯誤。(傳回值沒有變更,它仍然是錯誤元組。)

    自有 ID:OTP-6278 輔助 ID:seq10421

  • 新增了 BIF erlang:spawn_monitor/1,3spawn_opt/2,3,4,5 的新選項 monitor

    已更新 observer_backend 模組以處理新的 BIF。

    自有 ID:OTP-6281

  • 為了幫助 Dialyzer 找出更多錯誤,Kernel 和 STDLIB 應用程式中的許多函數現在只接受文件中記錄的類型引數。

    例如,lists:prefix/2lists:suffix/2 函數的文件僅說明接受串列作為引數,但它們實際上接受任何內容並傳回 false。這已變更,因此如果一個或兩個引數不是串列,則函數會導致例外狀況。

    此外,string:strip/3 函數的文件說明接受字元引數,此字元會從字串的一端或兩端移除。如果提供串列而不是字元,它以前不會執行任何動作,但現在會導致例外狀況。

    Dialyzer 將會找出大多數情況下,這些函數被傳入錯誤型別的參數。

    * 可能的不相容性 *

    專案 ID:OTP-6295

Kernel 2.11.1.1

改進與新功能

  • 現在 UDP socket 有一個選項 `read_packets`,可以設定每次 socket 驅動程式調用時讀取的最大 UDP 封包數。

    專案 ID:OTP-6249,輔助 ID:seq10452

Kernel 2.11.1

修正錯誤與故障

  • 在 R11B-0 中,`erl_ddll` 伺服器程序總是會啟動。儘管如此,Kernel 應用程式的組態參數 start_ddll 仍然會被遵循,這會導致 `erl_ddll` 伺服器啟動兩次(並導致系統關閉)。在此版本中,不再使用 start_ddll,並且其文件已被移除。

    專案 ID:OTP-6163

  • kernel 選項 `{dist_auto_connect,once}` 可能會阻擋從未連接過的節點,導致網路持續分割。此外,網路的部分重新啟動可能會導致全域名稱資料庫不一致。這兩個問題現在都已解決。

    專案 ID:OTP-6200,輔助 ID:seq10377

改進與新功能

  • 現在,當程序呼叫 `gen_tcp:close/1`、`gen_udp:close/1` 和 `inet:close/1` 時,延遲到達的 tcp_closed 和 udp_closed 訊息會從該程序的訊息佇列中移除。

    專案 ID:OTP-6197

Kernel 2.11

修正錯誤與故障

  • 當修復具有損壞索引檔(例如由硬碟故障引起)的磁碟日誌時,索引檔的舊內容將保持不變。這將導致重複嘗試開啟磁碟日誌每次都失敗。

    專案 ID:OTP-5558,輔助 ID:seq9823

  • 先前,unlink/1erlang:demonitor/2 的行為是完全非同步的。但這樣做有一個不良影響。您永遠無法知道何時可以保證不會受到您已取消連結的連結或已取消監控的監控器的影響。

    unlink/1erlang:demonitor/2 的新行為可以視為以原子方式執行的兩個操作。非同步發送取消連結訊號或取消監控訊號,並忽略連結或監控器任何未來的結果。

    注意:此變更可能會導致先前沒有失敗的某些晦澀程式碼失敗。例如,以下程式碼可能會掛起

                Mon = erlang:monitor(process, Pid),
                %% ...
                exit(Pid, bang),
                erlang:demonitor(Mon),
                receive
                    {'DOWN', Mon, process, Pid, _} -> ok
                %% We were previously guaranteed to get a down message
                %% (since we exited the process ourself), so we could
                %% in this case leave out:
                %% after 0 -> ok
                end,

    * 可能的不相容性 *

    專案 ID:OTP-5772

  • 應用程式啟動失敗並可能導致執行時系統停止運作時的行為已清理,包括修復一些小錯誤。

    application_controller 現在應該總是會以非巢狀字串終止,這表示 erl_crash.dump 中的口號應該總是容易閱讀。

    init 現在確保傳遞給 erlang:halt/1 的口號不會超過允許的最大長度。

    已從原始 error_logger 事件處理程式中移除多餘的 list_to_atom/1 呼叫。(感謝 Serge Aleynikov 指出這一點)。

    這些變更僅影響錯誤訊息和當機傾印檔案口號的內容。

    專案 ID:OTP-5964

  • 現在,當 OTP 啟動時,會啟動 erl_ddll 伺服器,並將其放置在 Kernel 監管程序下。這修復了幾個小問題。它過去是按需啟動的。

    已移除 erl_ddll 模組中 startstop 函數的文件,因為這些函數不打算由其他應用程式使用。

    此外,erl_ddll:stop/1 函數不再終止 erl_ddll 伺服器,因為那樣會終止整個執行時系統。

    專案 ID:OTP-6033

改進與新功能

  • application_master 中移除一些未使用的函數。

    專案 ID:OTP-3889

  • 全域不再允許使用多個名稱註冊程序。如果需要舊的(有錯誤的)行為,可以為 Kernel 應用程式變數 global_multi_name_action 指定值 allow

    專案 ID:OTP-5640,輔助 ID:OTP-5603

  • 當編譯 erlang.erl 檔案時顯示的(稍微具有誤導性的)警告已消除。

    專案 ID:OTP-5947

  • auth 模組 API 已棄用。

    專案 ID:OTP-6037

  • 新增 erlang:demonitor/2,使其能夠同時清除收到的 'DOWN' 訊息(如果有的話)。請參閱 erlang

    專案 ID:OTP-6100,輔助 ID:OTP-5772

Kernel 2.10.13

修正錯誤與故障

  • 現在 Solaris 8 可以處理大檔案(超過 2 GB)。

    專案 ID:OTP-5849,輔助 ID:seq10157

  • 在啟動期間,inet_gethost_native 留下了一個垃圾 {'DOWN', ...} 訊息,導致啟動的程式碼伺服器出現問題。

    專案 ID:OTP-5978,輔助 ID:OTP-5974

改進與新功能

  • 當維護完全連接的網路時,global 現在會嘗試多次連接節點。在高負載下,有時需要多次嘗試。

    專案 ID:OTP-5889

  • 現在,erl_epmd 在呼叫 gen_server:call 時會明確將逾時設定為 infinity。在非常高的負載下,舊的 15 秒逾時可能會逾時。

    專案 ID:OTP-5959

  • 已更正程式碼伺服器的啟動,以使用參考標記的元組,以確保傳送給父程序的意外訊息不會導致系統停止。此外,還移除了 code.erlcode_server.erl 中無用的 start/* 函數,並且不再從 code_server.erl 匯出 init 函數。

    專案 ID:OTP-5974,輔助 ID:seq10243、OTP-5978

Kernel 2.10.12

修正錯誤與故障

  • 已修正 global 中的一個錯誤:鎖定程序將 nonode@nohost 加入到要鎖定的節點清單中。這可能會在任何節點為全域名稱伺服器所知之前發生。根據網路組態,症狀是延遲。

    專案 ID:OTP-5792,輔助 ID:OTP-5563

  • 如果缺少 .app 檔案,則 application:load/1 傳回的錯誤原因已更正為 {"no such file or directory", "FILE.app"},而不是較不具資訊性的 {"unknown POSIX error","FILE.app"}

    專案 ID:OTP-5809

  • 錯誤修正:disk_log:accessible_logs/0 不再將所有 pg2 程序群組回報為分散式磁碟日誌;disk_log:pid2name/1 無法識別分散式磁碟日誌的程序。

    專案 ID:OTP-5810

  • 函數 file:consult/1file:path_consult/2file:eval/1,2file:path_eval/2,3file:script/1,2file:path_script/2,3 現在會在錯誤元組中傳回正確的行號。

    專案 ID:OTP-5814

  • 如果開機指令碼中有使用者定義的變數,並且沒有使用 -boot_var 選項提供它們的值,模擬器將會拒絕啟動並顯示令人困惑的錯誤訊息。已更正為顯示清晰易懂的訊息。

    修改了 prim_file 模組,使其不依賴 lists 模組,以便可以使用使用者定義的載入器啟動模擬器。(感謝 Martin Bjorklund。)

    專案 ID:OTP-5828,輔助 ID:seq10151

  • 對開啟模式的描述進行了微小的更正。(感謝 Richard Carlsson。)

    專案 ID:OTP-5856

改進與新功能

  • 現在,application_controller 會以實際的錯誤原因終止,而不是 shutdown。這表示,當應用程式發生錯誤而導致執行時系統終止時,當機傾印現在應該會提供更多資訊。

    範例:如果(永久)應用程式 app1 啟動失敗,現在的口號將會是:「Kernel pid terminated (application_controller) ({application_start_failure,app1,{shutdown, {app1,start,[normal,[]]}}})

    而不是先前的「Kernel pid terminated (application_controller) (shutdown)」。

    專案 ID:OTP-5811

Kernel 2.10.11.1

修正錯誤與故障

  • 計時器有時可能會過早逾時。此錯誤現在已修正。

    已引入自動取消由 erlang:send_after(Time, pid(), Msg) 和 erlang:start_timer(Time, pid(), Msg) 建立的計時器。當接收者退出時,以 pid 指定接收者建立的計時器將會自動取消。如需更多資訊,請參閱 erlang 手冊頁面。

    為了能夠在不增加維護成本的情況下維護大量的計時器,內部計時器輪和雙向計時器表已擴大。

    此外,還實施了一些次要的雙向計時器優化。

    自有 ID:OTP-5795 輔助 ID:OTP-5090,seq8913,seq10139,OTP-5782

改進和新功能

  • 文件改進

    - 修正了 erlang:link/1 的文件

    - 新增了命令行標誌 -code_path_cache

    - erl 命令行標誌澄清

    - net_kernel 澄清

    自有 ID:OTP-5847

核心 2.10.11

修正的錯誤和故障

  • 全域名稱註冊機制中的多項錯誤修復和改進(請參閱 global

    • 名稱解析程序並非總是取消連結不再註冊的程序;
    • nodedown 之後立即接著 nodeup 時,全域名稱有時可能會掛起;
    • 當節點關閉時,全域名稱並非總是取消註冊;
    • 現在可以在全域名稱伺服器解析名稱的同時設定和刪除鎖定--全域鎖定的處理已與全域名稱的註冊分開;

    從這個版本開始,global 不再支援執行 Erlang/OTP R7B 或更早版本的節點。

    * 可能的不相容性 *

    自有 ID:OTP-5563

  • 函數 global:set_lock/3global:trans/4 現在接受 Retries 參數的值 0 (零)。

    自有 ID:OTP-5737

  • 如果 Addr 參數是包含 IP 位址的 4 或 8 元組,則 inet:getaddr(Addr, Family) 不再驗證 Addr 參數,但會驗證元組的大小及其是否包含正確範圍內的整數。

    變更的原因是驗證可能會導致以下呼叫序列失敗

    {ok,Addr} = inet:getaddr(localhost, inet6), gen_tcp:connect(Addr, 7, [inet6])

    自有 ID:OTP-5743

改進和新功能

  • 先前未記錄且不受支援的 zlib 模組已以不相容的方式更新,並且已修正許多錯誤。現在也已加入文件。

    * 可能的不相容性 *

    自有 ID:OTP-5715

  • 新增了 application 介面函數 which_applications/1set_env/4unset_env/3,這些函數採用額外的 Timeout 參數。用於標準 gen_server 超時 (5000 毫秒) 不足的情況。

    自有 ID:OTP-5724 輔助 ID:seq10083

  • 改進了關於使用包含的應用程式同步啟動應用程式的文件 (使用啟動階段和 application_starter)。

    自有 ID:OTP-5754

  • 為支援它們的平台新增了新的通訊端選項 prioritytos (目前僅限 Linux)。

    自有 ID:OTP-5756

  • 全域名稱伺服器在維護完全連線的網路方面已獲得最佳化。

    自有 ID:OTP-5770

核心 2.10.10.1

修正的錯誤和故障

  • 原生解析器已獲得擴展偵錯和軟重新啟動的控制 API。它是:inet_gethost_native:control(Control)
    Control = {debug_level,Level} | soft_restart
    Level = 0-4 範圍內的整數.

    自有 ID:OTP-5751 輔助 ID:EABln25013

核心 2.10.10

修正的錯誤和故障

  • 如果多個程序 (在同一個節點上) 同時嘗試啟動相同的分散式應用程式,則可能會導致 application:start 傳回錯誤的值,甚至掛起。

    自有 ID:OTP-5606 輔助 ID:seq9838

改進和新功能

  • 大多數核心和一些 STDLIB 模組的手冊頁面都已更新,特別是在類型定義方面。

    已更正 erts:info/1 的傳回值的文件。

    erlang:statistics/1 的文件現在列出所有可能的參數。

    自有 ID:OTP-5360

  • 當原生解析器失敗 gethostbyaddr 查詢時,應傳回 nxdomain。不應嘗試回退到僅在 IP 位址語法有效時才會成功的常式。此問題已修正。

    自有 ID:OTP-5598 輔助 ID:OTP-5576

  • 將一些元組函數替換為新的 fun M:F/A 建構。

    lists 模組中的高階函數在任何情況下都不再接受錯誤的函數。'lists:map(bad_fun, [])' 過去會傳回 '[]',但現在會導致例外狀況。

    已移除 ets 模組中未使用的損壞相容性程式碼。(感謝 Dialyzer。)

    消除了 Dialyzer 在 Appmon 應用程式中發現的 5 個差異。

    自有 ID:OTP-5633

  • 已新增在設定檔 (使用 -config 標誌指定的文件) 中的元組清單後加上註解的功能。

    自有 ID:OTP-5661 輔助 ID:seq10003

核心 2.10.9

修正的錯誤和故障

  • 如果 sys.config 檔案在點之後完全不包含任何空白字元,則 'erl -config sys.config' 將無法啟動。(感謝 Anders Nygren。)

    自有 ID:OTP-5543

  • 已修正導致掛起的 gen_tcp:send/2 的 TCP 通訊端相關錯誤。要遇到此錯誤,您需要一個從通訊端讀取的程序、一個寫入的資料多於讀取器讀取的程序,以便傳送器暫停,然後讀取器關閉通訊端。(由 Alexey Shchepin 報告和診斷。)

    已修正 gen_tcp 的 (未記錄且不受支援的) 選項 {packet,http} 中的錯誤。(感謝 Claes Wikstrom 和 Luke Gorrie。)

    更新了關於 gen_tcp:recv/2 的第二個參數,即要接收的 Length 的文件。

    自有 ID:OTP-5582 輔助 ID:seq9839

改進和新功能

  • 在啟動時,Erlang 解析器主機表會用來查閱本機 (以及可能獨立) 主機的名稱。這是錯誤的。現在使用設定的解析器方法來達到此目的。

    自有 ID:OTP-5393

  • 現在已記錄 erlang:port_info/1 BIF。針對 erlang:port_info/2 的文件進行了小幅更正。

    math 模組的文件中新增了一則附註,指出並非所有平台都提供所有函數。

    在 ERTS 文件中的 erl 手冊頁面中,新增了關於 +c 選項的更多資訊。

    自有 ID:OTP-5555

  • 新的 fun M:F/A 建構會建立一個參考最新版本 M:F/A 的函數。此語法旨在取代有許多問題的元組函數 {M,F}

    新的類型測試 is_function(Fun,A) (可用於防護) 測試 Fun 是否為可以使用 A 引數套用的函數。(目前,Fun 也可以是元組函數。)

    自有 ID:OTP-5584

  • 根據文件,如果已註冊程序,則 global 會實作與 register/2 等效的功能,並傳回 badarg。事實證明,如果程序以多個名稱註冊,則 global 中沒有檢查。如果某些程序意外或經過設計給予了多個名稱,則名稱登錄可能會因發現名稱衝突時呼叫解析函數的方式而變得不一致 (請參閱 global 中的 register_name/3)。

    在 OTP R11B 中,global 將不允許以多個名稱註冊程序。為了協助尋找將傳回 no 的程式碼,因此引入了核心應用程式變數 global_multi_name_action。根據其值 (infowarningerror),當 global 發現某些程序被賦予多個名稱時,訊息會傳送到錯誤記錄器。變數僅影響定義它的節點。

    自有 ID:OTP-5603

核心 2.10.8

改進和新功能

  • 如果發生 DNS 查閱迴圈,inet_db:getbyname 會建立無限清單。此問題已修正。

    自有 ID:OTP-5449

  • 在 IPv4 位址上執行 inet6 名稱查閱時,可能會取得 IPv4 格式的位址。此問題已修正。也修正了一些關於 IPv6 名稱查閱的其他小不一致之處。

    自有 ID:OTP-5576

核心 2.10.7

修正的錯誤和故障

  • 在某些情況下,net_kernel 可能會發出虛假的節點關閉訊息。此錯誤已修正。

    自有 ID:OTP-5396

  • 已移除 kernel 手冊頁面中 keep_zombies 設定參數的描述。

    自有 ID:OTP-5497

改進和新功能

  • 移除了 initprim_file 模組中 Dialyzer 的警告(由無用程式碼引起)。

    自有 ID:OTP-5496

  • inet_config 現在也會檢查環境變數 ERL_INETRC 是否存在使用者設定檔。詳情請參閱 ERTS 使用者指南。

    自有 ID:OTP-5512

Kernel 2.10.6

改進與新功能

  • 引入了 +B 旗標的 c 選項,可以使用 Ctrl-C(在 Windows 上為 Ctrl-Break)來中斷 shell 程序,而不是調用模擬器的中斷處理程序。目前,所有新的 +B 選項在 Windows (werl) 上也支援。此外,Windows 上的 Ctrl-C 現在已保留用於複製文字(先前使用 Ctrl-Ins)。Ctrl-Break 應該用於中斷處理。最後,系統旗標的文件已更新。

    自有 ID:OTP-5388

  • 為了在 STDLIB 1.13.1 中實現向後相容性,重新引入了與系統其餘部分並行啟動 Erlang shell 的可能性。用於此目的的旗標現在稱為 async_shell_start,並且已記錄在文件中。從 JCL 選單啟動的新 shell 不再與 init 同步。即使初始 shell 尚未啟動,也可以啟動新的 shell(例如,用於除錯目的)。

    自有 ID:OTP-5406 輔助 ID:OTP-5218

Kernel 2.10.5

修復的錯誤和故障

改進與新功能

  • 新增了 net_kernel:monitor_nodes/2,它接受一個旗標和一個選項列表。透過使用 net_kernel:monitor_nodes/2,可以訂閱包含額外資訊的 nodeup/nodedown 訊息。現在可以監控隱藏節點,並取得 nodedown 原因。請參閱 net_kernel 文件以取得更多資訊。

    自有 ID:OTP-5374

Kernel 2.10.4

修復的錯誤和故障

  • 應用程式的應用程式主程序現在可以更快地終止應用程式,從而降低系統其他部分發生超時的風險。

    自有 ID:OTP-5363 輔助 ID:EABln19084

  • 新增了 BIF erlang:raise/3。詳情請參閱手冊。它僅用於內部系統程式設計,用於進階錯誤處理。

    自有 ID:OTP-5376 輔助 ID:OTP-5257

Kernel 2.10.3

改進與新功能

  • 使用 -eval 旗標(erl -eval Expr),可以在系統初始化期間評估任意表達式。這記錄在 init 中。

    自有 ID:OTP-5260

  • 移除了不受支援且未記錄的模組 socks5socks5_authsocks5_tcpsocks5_udp

    自有 ID:OTP-5266

Kernel 2.10.1

修復的錯誤和故障

  • Pman 的「追蹤 shell」功能已損壞,現在已修復。此外,如果節點上執行多個 shell 程序,Pman 可能無法正確找到活動 shell 的 PID。這也已得到修正。

    自有 ID:OTP-5191

  • 移除了不再存在的 auth:open/1 函數的文件。(感謝 Miguel Barreiro。)

    自有 ID:OTP-5208

  • 更正了未記錄且不受支援的 zlib 模組中的 crc32/3 函數。

    自有 ID:OTP-5227

改進與新功能

  • 現在可以使用 -rsh 旗標啟動 Erlang,它會提供遠端初始 shell 而不是本機 shell。範例:

                erl -sname this_node -rsh other_node@other_host

    自有 ID:OTP-5210

  • 如果 /etc/hosts 指定了兩個具有相同 IP 位址的主機(在不同的行上),則在 inet 配置期間,inet_db 只會註冊最後一個主機。現在已更正,以便兩個別名都註冊相同的 IP 位址。

    自有 ID:OTP-5212 輔助 ID:seq7128

  • 澄清了接受 I/O 列表的 BIF 的文件。這些是 list_to_binary/1port_command/2port_control/3

    新增了所有 is_* BIF(例如 is_atom/1)的文件。

    移除了 erlang:float_to_binary/2 的文件,該函數已在幾個版本前從執行時系統中移除。

    自有 ID:OTP-5222