檢視原始碼 核心版本發行說明
本文檔描述了對 Kernel 應用程式所做的變更。
Kernel 10.2
已修正的錯誤和故障
gen_sctp:peeloff/2
已修正,使其更像gen_tcp:accept/1
一樣,將 socket 選項繼承到剝離的 socket,例如選項tos
或tclass
。當設定平台上不支援的 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/0
的logger
函數中重疊spec
網域的問題。自有 ID:OTP-19302 輔助 ID:PR-8959
已修正
code_server
上的死鎖。多個呼叫載入具有on_load
函數載入呼叫的相同模組會產生死鎖。
改進和新功能
Kernel 應用程式現在可以識別
epmd_module
和erl_epmd_listen_port
參數,類似於-kernel:connect_all
。自有 ID:OTP-19253 輔助 ID:PR-8671
為了提高與意外使用 atom 的舊組態的相容性,
inetrc
核心參數現在會再次容忍 atom。預期的類型始終是且仍然是字串。
已更新
file:io_device/0
類型,以清楚顯示raw
和cooked
IoDevice 之間的差異。自有 ID:OTP-19301 輔助 ID:PR-8956
已更新 Erlang/OTP 類型規格,以消除重疊的網域。
新增核心參數
os_cmd_shell
,用於控制os:cmd/1
應使用哪個 shell。自有 ID:OTP-19342 輔助 ID:PR-8972
新增對
io:user/0
、io:standard_io/0
和io: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_func
和rotate
選項無法運作。自有 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-19205
指定多次時,
-proto_dist
初始化參數將不再被忽略。它現在會記錄警告並使用第一個指定的值。自有 ID:OTP-19208 輔助 ID:PR-8672
已更正 genaddr (SIOCGENADDR) 的 socket:ioctl。
自有 ID:OTP-19216
改進和新功能
已將函數
getservbyname
和getservbyport
新增到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,快取資料可能會讀取平台網路堆疊應該解密的資料,然後才能啟動加密參數。
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
要求現在會正確傳回二進位或清單。現在可以使用組態選項呼叫
logger:add_handlers/1
。現在,
code:del_path/1
函式也適用於透過-pa
、-pz
、-path
和啟動腳本新增的路徑。在 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
視為新行的問題。
改進與新功能
新增了帶有
raw
選項的file:read_file/2
,用於讀取檔案時不經過檔案伺服器。專屬 ID:OTP-18589 輔助 ID:PR-7220
未記載的 Erlang DNS 解析器函式庫(
inet_dns
和inet_res
)已擴充,可處理 IXFR、NOTIFY、UPDATE 和 TSIG 記錄。此外,還進行了一些錯誤修復和程式碼清理,並且測試套件中使用的解析器已變更為 Knot DNS。請參閱原始碼。感謝 Alexander Clouter 完成了幾乎所有的工作!
現在會快取 escript 的
ebin
目錄。專屬 ID:OTP-18778 輔助 ID:PR-7556
已將
-callback
屬性新增至application
、logger_handler
和logger_formatter
。專屬 ID:OTP-18795 輔助 ID:PR-7703
當記錄層級設定為除錯時,現在會記錄在記錄器啟動之前發出的進度報告。
專屬 ID:OTP-18807 輔助 ID:PR-7732 ERIERL-985
現在,
code:where_is_file/2
和code:which/1
函式會直接檢查檔案是否存在,而不是列出程式碼路徑中每個目錄的內容。專屬 ID:OTP-18816 輔助 ID:PR-7711
已將型別規範新增至
logger:Level/1,2,3
函式。專屬 ID:OTP-18820 輔助 ID:PR-7779
對於
inet_backend = socket
,單獨將active
socket 選項設定為once
、true
或N
已經過最佳化,並且對應的資料傳輸也經過最佳化。專屬 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
以下還有用於支援原生涵蓋範圍的新函式
code:coverage_support/0
code:get_coverage/2
code:reset_coverage/1
code:get_coverage_mode/0
code:get_coverage_mode/1
code:set_coverage_mode/1
專屬 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_loader
和code:lib_dir/2
。可能不相容
專屬 ID:OTP-18966 輔助 ID:PR-8091
已移除未記載且已棄用的
file:pid2name
函式。專屬 ID:OTP-18967 輔助 ID:PR-8092
Kernel 中有一個新的模組
trace
,它提供與erlang:trace/3
和erlang: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
- 現在,
將
stdin
、stdout
和stderr
金鑰新增至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_func
與rotate
選項結合使用時無法運作。自有 ID:OTP-19104 輔助 ID:ERIERL-870
Kernel 9.2.4
已修正的錯誤和故障
修正 shell 工作控制模式,使其在輸入
TAB
或CTRL+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:fread
從standard_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_io
、standard_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_io
、standard_error
和user
I/O 裝置的說明文件。新增了類型
io:standard_io/0
、io:standard:error/0
和io: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,2
或init_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
- 外部 term 格式中版本 4 節點容器類型的支援現在是強制性的。也就是說,支援最多 5 個 32 位元整數識別碼的參考,以及支援 64 位元資料儲存的程序和連接埠識別碼。因此,分發旗標
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
的行為已以不向後相容的方式變更。只有在同時設定了reusaddr
和reuseport
inet
選項時,才會設定底層SO_REUSEADDR
Socket 選項。這是因為 Windows 上的底層SO_REUSEADDR
Socket 選項的行為類似於設定了底層 Socket 選項SO_REUSEADDR
和SO_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_kernel
、global
和global_group
伺服器現在一直啟用完全非同步分散式訊號,可防止它們在傳送分散式訊號時被封鎖。關於封鎖分散式訊號的文件也已改進。
專屬 ID:OTP-18533 輔助 ID:PR-7061
允許 IPv6 位址作為
erlang:decode_packet/3
和gen_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_port
的emfile
已轉譯為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_group
和global
中各種其他不一致的錯誤和死鎖。作為這些修正的建構區塊,已引入新的 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/2
和inet: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
中引入了hidden
和dist_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)
(或任何其他記錄函式) 時,使用原子string
或report
作為格式會導致崩潰或錯誤記錄的錯誤。自有 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_BINARIES
、DFLAG_EXPORT_PTR_TAG
、DFLAG_MAP_TAGS
、DFLAG_NEW_FLOATS
和DFLAG_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
請求,erpc
、gen_server
、gen_statem
和gen_event
中引入了使用請求識別碼集合的新功能。自有 ID:OTP-17784 輔助 ID:PR-5792
類型規範已新增至
gen_server
,並且文件已更新以使用此規範。這暴露出一些在
global
、logger_olp
和rpc
中已更正的類型違規。自有 ID:OTP-17915 輔助 ID:PR-5751、GH-2375、GH-2690
IP 位址驗證函式
is_ipv4_address/1
、is_ipv6_address/1
和is_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_tcp
的send_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
改進和新功能
自有 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/2
、list_to_existing_atom/1
、erlang: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_lib
、common_test
和qlc
也會使用相同的擴充錯誤資訊。對於希望提供相同擴充錯誤資訊的應用程式,有新的函式
erl_error:format_exception/3
和erl_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_server
、gen_statem
和gen_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}
,後者僅與inet
和inet6
位址系列相關,且通常並不重要。若要找出選擇了哪個連接埠,請使用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
改進和新功能
引入了一個
net_tickintensity
kernel
參數。它可用於控制在net_ticktime
期間的刻度數量。為了更容易新增新選項,還引入了新的
net_kernel:start/2
函式。已棄用net_kernel:start/1
的使用。自有 ID:OTP-17905 輔助 ID:ERIERL-732、PR-5740
核心 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
中由於未處理的 straygen_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
應用程式中引入了一個新的模組erpc
。erpc
模組實作了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_lib
、gen_server
、gen_event
、gen_statem
、gen_fsm
、supervisor
、supervisor_bridge
和application
。改善了
chars_limit
和depth
在proc_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_tcp
和inet
的socket
後端。其他模組也將陸續推出。歡迎提供意見反應。自有 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
如果給予
all
或none
作為任何參數,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
修正了在
compressed
或delayed_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
修正的錯誤與故障
修正
seq_trace:set_token/2
的類型規格。自有 ID:OTP-15858,輔助 ID:ERL-700
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/0
和string/0
。自有 ID:OTP-15557 輔助 ID:PR-2117
Logger 處理程式 logger_std_h 現在會追蹤其日誌檔案的 inode,以便在 inode 變更時重新開啟檔案。例如,如果日誌檔案由編輯器開啟和儲存,就可能會發生這種情況。
自有 ID:OTP-15578 輔助 ID:ERL-850
當使用者特定的檔案模式提供給日誌處理程式
logger_std_h
時,先前會在沒有任何控制的情況下接受這些模式。現在已變更,因此 Logger 將如下調整檔案模式- 如果在清單中找不到
raw
,則會加入。
- 如果在清單中找不到write
、append
或exclusive
,則會加入append
。
- 如果在清單中找不到delayed_write
或{delayed_write,Size,Delay}
,則會加入delayed_write
。自有 ID:OTP-15602
改進與新功能
標準日誌處理程式
logger_std_h
現在具有用於日誌輪換的新內部功能。輪換方案如下處理程式目前寫入的日誌檔案始終具有相同的名稱,即為處理程式設定的名稱。封存的檔案具有相同的名稱,但副檔名為「.N」,其中 N 為整數。最新的封存副檔名為「.0」,而最舊的封存副檔名數字最高。
日誌檔案輪換的大小以及保留的封存檔案數量,分別由處理程式特定的設定參數
max_no_bytes
和max_no_files
指定。封存可以壓縮,在這種情況下,它們會在整數之後取得「.gz」檔案副檔名。壓縮是使用處理程式特定的設定參數
compress_on_rotate
指定。自有 ID:OTP-15479
新增了新的函數
logger:i/0
和logger: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,2
和application: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_io
、standard_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/0
和logger: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_h
和logger_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
已修正的錯誤與故障
值
all
和none
被記錄為核心組態參數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 選項
recvtos
、recvttl
、recvtclass
和pktoptions
已在 socket 模組中實作。請參閱gen_tcp
、gen_udp
和inet
模組的說明文件。請注意,執行時期系統中對這些選項的支援是依平台而定。特別是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/0
和inet:posix/0
的類型規格。自有 ID:OTP-14019 輔助 ID:ERL-550
修正在僅限 IPv6 的環境中執行初始分散式連線時的名稱解析。
自有 ID:OTP-14501
檔案操作以前會接受包含空字元(整數值為零)的檔名。這會導致名稱被截斷,並且在某些情況下,會混淆基本操作的引數。現在會拒絕包含空字元的檔名,並導致基本檔案操作失敗。
此外,環境變數操作以前會接受包含空字元(整數值為零)的環境變數名稱和值。這會導致操作靜默地產生錯誤的結果。現在會拒絕名稱或值中包含空字元的環境變數名稱和值,並導致環境變數操作失敗。
基本環境變數操作以前也接受環境變數名稱中的
$=
字元,導致各種問題。現在也拒絕環境變數名稱中的$=
字元。從現在起,
erlang:open_port/2
也會拒絕 port 名稱中的空字元。* 可能的不相容性 *
自有 ID:OTP-14543 輔助 ID:ERL-370
os:putenv
和os:getenv
不再直接存取程序環境,而是使用執行緒安全的模擬。唯一可觀察到的差異是,它不會與 libcgetenv(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_info
、file:change_owner
和file: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_logger
和sasl_errlog_type
指定這些事件記錄的目的地(終端機或檔案)和嚴重性層級。
由於 Logger 是 Erlang/OTP 21.0 中的新功能,因此我們保留在此版本之後的修補程式中引入 Logger API 和功能變更的權利。這些變更可能與初始版本向後相容,也可能不相容。
* 可能的不相容性 *
內部 ID:OTP-13295
函式
inet:i/0
已被記錄。內部 ID:OTP-13713 輔助 ID:PR-1645
netns
和bind_to_device
選項的類型規格已新增至gen_tcp
、gen_udp
和gen_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
已修正的錯誤和故障
核心 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:collect
和lcnt: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/0
是code: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_server
、gen_statem
和proc_lib
建立的當機報告大小,會藉由 Kernel 應用程式變數error_logger_format_depth
來限制。其目的是限制當訊息佇列或狀態龐大的程序當機時,傳送至error_logger
程序的訊息大小。由
proc_lib
產生的當機報告包含新的標籤message_queue_len
。鄰近報告也包含新的標籤current_stacktrace
。最後,鄰近報告不再包含標籤messages
和dictionary
。新的函數
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/2
和net_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/1
的Status
引數進行健全性檢查,以確保erlang:halt
不會失敗。內部 ID:OTP-13631 輔助 ID:PR-911
改良功能和新功能
新增 {line_delim, byte()} 選項至 inet:setopts/2 和 decode_packet/3
內部 ID:OTP-12837
perf_counter 是一種非常非常便宜且高解析度的計時器,可用於為系統事件加上時間戳記。它沒有單調性保證,但在大多數作業系統上應公開單調時間。
內部 ID:OTP-12908
已在 Unix 平台上最佳化 os:cmd 呼叫,以便隨排程器數量擴展。
內部 ID:OTP-13089
在 '
code
' 模組中新增了可以一次載入多個模組的新函數。這些函數包括code:atomic_load/1
、code:prepare_loading/1
、code:finish_loading/1
和code: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_timestamp
和strict_monotonic_timestamp
選項。因為已經存在的timestamp
選項不是時間扭曲安全。在
ets:info/2
和dets: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/2
和deflateInit/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/4
和application: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/2
和check_process_code/3
BIF。兩者都將選項清單作為最後一個引數。使用這些,可以發出非同步請求。已重寫
code:purge/1
和code:soft_purge/1
以利用非同步check_process_code
請求來平行化工作。特性影響:呼叫
garbage_collect/1
BIF 或check_process_code/2
BIF 通常會需要較長的時間才能完成,而整個系統不會像以前那樣受到操作的負面影響。呼叫code:purge/1
和code: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
和/或ip
的fd
選項時,port
和ip
選項會被忽略。這已修正,因此如果port
和/或ip
與fd
一起指定,則會要求針對該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/1
、gen_tcp:close/1
、gen_udp:close/1
或gen_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_watermark
和low_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/1
和file: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,3
和disk_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/2
和file: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/1
或code
中其他函數的 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
修正的錯誤與故障
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
,則封存檔中的頂層目錄可以命名為mnesia
或mnesia-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..5
和inet_res:nnslookup/4..4
,而是使用inet_res:lookup/3..5
和inet_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_res
和inet_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}
訊息,現在保證會在Node
從erlang:nodes/Y
回傳的結果中移除後才被傳送。自有 ID:OTP-7725
已移除已棄用的函式
erlang:fault/1
、erlang:fault/2
和file: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_lib
的gen_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
現在實驗性支援從封存檔案載入程式碼。如需更多資訊,請參閱
code
、init
、erl_prim_loader
和escript
的文件。已改善
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/2
的hide
選項。(感謝 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_log
和pg2
之間競爭條件所導致的錯誤。自有 ID:OTP-7209 輔助 ID:seq10890
Beta 測試模組
gen_sctp
現在如文件所述支援主動模式。主動模式仍然未經充分測試,並且關於gen_sctp:connect/5
的正確語義存在一些問題。特別是:它應該是阻塞的、非阻塞的還是可選擇的。在(近期)未來的修補程式中,它很有可能會更改語義。請嘗試使用,提供評論並發送錯誤報告!
自有 ID:OTP-7225
改進與新功能
erlang:system_info/1
現在接受logical_processors
和debug_compiled
引數。有關更多資訊,請參閱erlang
文件。如果模擬器使用的排程器執行緒數量大於系統上的邏輯處理器數量,則
test_server:timetrap_scale_factor/0
傳回的比例因子現在也會受到影響。自有 ID:OTP-7175
更新了
erlang:function_exported/3
和io:format/2
函數的文件,不再說明這些函數主要為了向後相容性而保留。自有 ID:OTP-7186
執行
processes/0
BIF 的程序現在可以在執行期間被其他程序搶佔。這樣做是為了盡可能減少對系統其他部分的干擾。當然,傳回的結果仍然是在呼叫processes/0
時存在的程序的一致快照。為了闡明現有程序與存活程序之間的區別,已更新
processes/0
BIF 和is_process_alive/1
BIF 的文件。自有 ID:OTP-7213
在文件中,已將
tuple_size/1
和byte_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/1
和byte_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/1
、init:get_flag/1
、init:get_flags/0
和init: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/1
、inet:ip4_to_bytes/1
、inet:ip6_to_bytes/1
和inet:bytes_to_ip6/16
。自有 ID:OTP-6938
將新的總和檢查碼組合函數新增至
zlib
。並修正了zlib:deflate
中的錯誤。感謝 Matthew Dempsky。自有 ID:OTP-6970
spawn_monitor/1
和spawn_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
改進與新功能
已更新
process_flag(priority, Level)
的文件,請參閱erlang
文件。自有 ID:OTP-6745 輔助 ID:OTP-6715
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,2
、warning_msg/1,2
和info_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/1
和code: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/1
和file: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,3
和spawn_opt/2,3,4,5
的新選項monitor
。已更新
observer_backend
模組以處理新的 BIF。自有 ID:OTP-6281
為了幫助 Dialyzer 找出更多錯誤,Kernel 和 STDLIB 應用程式中的許多函數現在只接受文件中記錄的類型引數。
例如,
lists:prefix/2
和lists: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/1
和erlang:demonitor/2
的行為是完全非同步的。但這樣做有一個不良影響。您永遠無法知道何時可以保證不會受到您已取消連結的連結或已取消監控的監控器的影響。unlink/1
和erlang: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
模組中start
和stop
函數的文件,因為這些函數不打算由其他應用程式使用。此外,
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.erl
和code_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/1
、file:path_consult/2
、file:eval/1,2
、file:path_eval/2,3
、file:script/1,2
、file: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/3
和global: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/1
、set_env/4
和unset_env/3
,這些函數採用額外的Timeout
參數。用於標準 gen_server 超時 (5000 毫秒) 不足的情況。自有 ID:OTP-5724 輔助 ID:seq10083
改進了關於使用包含的應用程式同步啟動應用程式的文件 (使用啟動階段和
application_starter
)。自有 ID:OTP-5754
為支援它們的平台新增了新的通訊端選項
priority
和tos
(目前僅限 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
。根據其值 (info
、warning
或error
),當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
改進和新功能
移除了
init
和prim_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
修復的錯誤和故障
刪除了
erlang:binary_to_float/1
的文件。BIF 本身已在幾個版本前移除。自有 ID:OTP-5391
改進與新功能
新增了
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
移除了不受支援且未記錄的模組
socks5
、socks5_auth
、socks5_tcp
和socks5_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/1
、port_command/2
、port_control/3
。新增了所有
is_*
BIF(例如is_atom/1
)的文件。移除了
erlang:float_to_binary/2
的文件,該函數已在幾個版本前從執行時系統中移除。自有 ID:OTP-5222