模組 Weak

module Weak: sig .. end

弱指標陣列和弱指標雜湊集合。


底層函式

type !'a t 

弱指標陣列(弱陣列)的類型。弱指標是指當程式不再透過(一般指標)使用該值時,垃圾收集器可能會清除的值。請注意,最終化函式會在弱指標被清除之前執行,因為最終化函式可以使值再次存活(在 4.03 版本之前,最終化函式是在之後執行的)。

如果弱指標指向一個值,則稱其為已滿;如果該值已被 GC 清除,則稱其為空。

注意事項

  • 整數不會被分配,因此無法儲存在弱陣列中。
  • 弱陣列無法使用 output_valueMarshal 模組的函式進行序列化。
val create : int -> 'a t

Weak.create n 會傳回一個長度為 n 的新弱陣列。所有指標最初都是空的。

val length : 'a t -> int

Weak.length ar 會傳回 ar 的長度(元素數量)。

val set : 'a t -> int -> 'a option -> unit

Weak.set ar n (Some el) 會將 ar 的第 n 個儲存格設定為指向 el 的(已滿)指標;Weak.set ar n None 會將 ar 的第 n 個儲存格設定為空。

val get : 'a t -> int -> 'a option

Weak.get ar n 如果 ar 的第 n 個儲存格為空,則傳回 None;如果已滿,則傳回 Some x(其中 x 為值)。

val get_copy : 'a t -> int -> 'a option

Weak.get_copy ar n 如果 ar 的第 n 個儲存格為空,則傳回 None;如果已滿,則傳回 Some x(其中 x 為該值的(淺層)副本)。除了可變值的陷阱外,與 get 的有趣區別在於,get_copy 不會阻止增量式 GC 在其目前週期中清除該值(get 可能會將清除延遲到下一個 GC 週期)。

val check : 'a t -> int -> bool

Weak.check ar n 如果 ar 的第 n 個儲存格已滿,則傳回 true;如果為空,則傳回 false。請注意,即使 Weak.check ar n 傳回 true,後續的 Weak.get ar n 仍可能傳回 None

val fill : 'a t -> int -> int -> 'a option -> unit

Weak.fill ar ofs len el 會將 ar 中從 ofsofs + len - 1 的所有指標設定為 el

val blit : 'a t -> int -> 'a t -> int -> int -> unit

Weak.blit ar1 off1 ar2 off2 len 會將 len 個弱指標從 ar1(從 off1 開始)複製到 ar2(從 off2 開始)。即使 ar1ar2 相同,也能正確運作。

弱雜湊集合

弱雜湊集合是一個雜湊值集合。當程式的其餘部分不再使用每個值時,每個值可能會神奇地從集合中消失。這通常用於在不導致記憶體洩漏的情況下共用資料結構。弱雜湊集合定義於 Hashtbl.HashedType 模組中的值;equal 關係和 hash 函式取自該模組。如果 equal x vtrue,我們將說 vx 的實例。

equal 關係必須能夠對值的淺層副本進行運作,並產生與值本身相同的結果。

未同步的存取

對弱雜湊集合的未同步存取是一個程式設計錯誤。對弱雜湊集合的未同步存取可能會導致弱雜湊集合狀態無效。因此,對弱雜湊集合的並行存取必須同步(例如使用 Mutex.t)。

module type S = sig .. end

函子 Weak.Make 的輸出簽名。

module Make: 
functor (H : Hashtbl.HashedType-> S with type data = H.t

建立弱雜湊集合結構的函子。