模組 Stdlib.Weak

module Weak: Weak

底層函數

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 nar 的第 n 個儲存格為空,則回傳 None;若為滿的,則回傳 Some x(其中 x 是該值)。

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

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

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

Weak.check ar nar 的第 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 函數取自該模組。我們會說 vx 的實例,如果 equal x vtrue

equal 關係必須能夠在值的淺複製上運作,並給出與值本身相同的結果。

非同步存取

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

module type S = sig .. end

函子 Weak.Make 的輸出簽名。

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

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