Weakこのページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。 last mod. 2009-09-10 (木) 14:22:12
module Weak: sig .. end ウィークポインタの配列とウィークポインタのハッシュテーブルです。 Low-level functionstype 'a t ウィークポインタの配列の型です (ウィーク配列) 。ウィークポインタとは、他の部分(ノーマルポインタ)かから使われていないとき、 ガベージコレクタに消されうる値のことです。。 ファイナライズ関数は、ウィークポインタが消された後に実行されます。 ウィークポインタは値を示しているとき full であるといい、その値が GC に消されていたら empty であるといいます。 注意:
val create : int -> 'a t Weak.create n は長さ n のウィーク配列を新しく作って返します。 ポインタはすべて初期値 empty です。n が負だったり Sys.max_array_length-1 より大きかったりした場合は例外 Invalid_argument を発生します。 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 へのポインタをいれて full にします。Weak.set ar n None は ar の n 番目のセルを empty にします。 n が 0 から Weak.length a - 1 までの範囲外だったら例外 Invalid_argument "Weak.set" を発生します。 val get : 'a t -> int -> 'a option Weak.get ar n は ar の n 番目のセルが empty だったら None を、full だったら Some x (x はその値) を返します。 n が 0 から Weak.length a - 1 までの範囲外だったら例外 Invalid_argument "Weak.set" を発生します。 val get_copy : 'a t -> int -> 'a option Weak.get ar n は ar の n 番目のセルが empty だったら None を、full だったら Some x (x はその値の(浅い)コピー) を返します。 書き換え可能な値の落とし穴がありますが、get と異なる面白い点は、get_copy は incremental GC が現在のサイクルで値を消去する妨げにならないということです (get は消去を次の GC サイクルに遅延させる可能性があります) 。 n が 0 から Weak.length a - 1 までの範囲外だったら例外 Invalid_argument "Weak.set" を発生します。 val check : 'a t -> int -> bool Weak.check ar n は ar の n 番目のセルが full だったら true を、empty だったら false を返します。ただし Weak.check ar n が true を返した直後に Weak.get をしても None が返るかもしれないことに注意してください。 val fill : 'a t -> int -> int -> 'a option -> unit Weak.fill ar ofs len el は ar の ofs 番目から ofs + len - 1 番目までのセルを el で埋めます。ofs と len が a の部分配列を示すものとして不正であった場合は例外 Invalid_argument "Weak.fill" を発生します。 val blit : 'a t -> int -> 'a t -> int -> int -> unit Weak.blit ar1 off1 ar2 off2 len は ar1 の off1 番目から len 個のウィークポインタを ar2 の off2 番目から len 個までにコピーします。 ar1 と ar2 が同一のものであっても正常に動作します。 off1 と len が ar1 の部分配列を示すものとして不正であった場合、または off2 と len が ar2 の部分配列を示すものとして不正であった場合は例外 Invalid_argument "Weak.fill" を発生します。 Weak hash tablesウィークハッシュテーブルはハッシュ化された値の集合です。それぞれの値は、プログラムの他でいっさい使われなくなったとき、集合から消えてしまう可能性があります。これは普通メモリリークを起こさない共有データ構造として使われます。 ウィークハッシュテーブルは Hashtbl.HashedType? モジュールの値に従って定義されます。つまりこのモジュールの equal 関数と hash 関数を利用します。equal x v が true のとき x のインスタンスが v であるといいます。 equal 関数は値の(浅い)コピーに対しても正常に動作し、元の値を与えたときと同じ結果を返さなければなりません。 module type S = sig end functor Weak.Make の出力 signature です。参照: Weak.S module Make: functor (H : Hashtbl.HashedType) -> sig end ウィークハッシュテーブル構造の実装を束縛する functor です。参照: Weak.Make |