Модуль Weak
module Weak: sig .. end
Массивы слабых указателей и хеш-множества слабых указателей.
Функции низкого уровня
type 'a t
Тип массивов слабых указателей (слабые массивы). Слабый указатель — это значение, которое сборщик мусора может удалить, когда значение больше не используется программой (через обычные указатели). Обратите внимание, что функции финализации выполняются до удаления слабых указателей, поскольку функции финализации могут сделать значения живыми снова (до версии 4.03 функции финализации выполнялись после).
Слабый указатель считается полным, если он указывает на значение, и пустым, если значение было удалено сборщиком мусора.
Примечания:
- Целые числа не выделяются и не могут храниться в слабых массивах.
- Слабые массивы не могут быть сериализованы с помощью
output_valueни функций модуляMarshal.
val create : int -> 'a t
Weak.create n возвращает новый слабый массив длины n. Все указатели изначально пустые.
-
Возбуждает
Invalid_argumentеслиnне находится в диапазоне от нуля доObj.Ephemeron.max_ephe_length(включительно).
val length : 'a t -> int
Weak.length ar возвращает длину (количество элементов) массива ar.
val set : 'a t -> int -> 'a option -> unit
Weak.set ar n (Some el) устанавливает n-ую ячейку массива ar в (полный) указатель на el; Weak.set ar n None устанавливает n-ую ячейку массива ar в пустое значение.
-
Возбуждает
Invalid_argumentеслиnне находится в диапазоне от 0 доWeak.lengtha - 1.
val get : 'a t -> int -> 'a option
Weak.get ar n возвращает None, если n-ая ячейка массива ar пустая, и Some x (где x — значение), если полная.
-
Возбуждает
Invalid_argumentеслиnне находится в диапазоне от 0 доWeak.lengtha - 1.
val get_copy : 'a t -> int -> 'a option
Weak.get_copy ar n возвращает None, если n-ая ячейка массива ar пустая, и Some x (где x — (поверхностная) копия значения), если полная. Помимо проблем с изменяемыми значениями, интересное отличие от get заключается в том, что get_copy не препятствует удалению значения инкрементальным сборщиком мусора в текущем цикле (get может отложить удаление до следующего цикла сборки мусора).
-
Возбуждает
Invalid_argumentеслиnне находится в диапазоне от 0 доWeak.lengtha - 1. Если элемент — это пользовательский блок, он не копируется.
val check : 'a t -> int -> bool
Weak.check ar n возвращает true, если n-ая ячейка массива ar полная, и 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 от ofs до ofs + len - 1 в el.
-
Возбуждает
Invalid_argumentеслиofsиlenне обозначают допустимый подмассивa.
val blit : 'a t -> int -> 'a t -> int -> int -> unit
Weak.blit ar1 off1 ar2 off2 len копирует len слабых указателей из ar1 (начиная с off1 ) в ar2 (начиная с off2). Она работает корректно, даже если ar1 и ar2 одинаковы.
-
Возбуждает
Invalid_argumentеслиoff1иlenне обозначают допустимый подмассивar1, или еслиoff2иlenне обозначают допустимый подмассивar2.
Слабые хеш-множества
Слабое хеш-множество — это хешированное множество значений. Каждое значение может магически исчезнуть из множества, когда оно больше не используется остальной частью программы. Это обычно используется для совместного использования структур данных без возникновения утечек памяти. Слабые хеш-множества определены на значениях из модуля Hashtbl.HashedType; отношение equal и функция hash взяты из этого модуля. Мы скажем, что v является экземпляром x если equal x v равно true.
Отношение equal должно работать с поверхностной копией значений и давать тот же результат, что и с самими значениями.
module type S = sig .. end
Подпись результата функтора Weak.Make.
module Make: functor (H : Hashtbl.HashedType) -> S with type data = H.t
Функтор, создающий реализацию структуры слабого хеш-множества.
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/libref/Weak.html