Модуль 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.lengthar - 1.
val get : 'a t -> int -> 'a option
Weak.get ar n возвращает None, если n-я ячейка ar пустая, и Some x (где x — значение), если она полная.
-
Возбуждает исключение
Invalid_argumentеслиnне находится в диапазоне от 0 доWeak.lengthar - 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.lengthar - 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.
-
Возбуждает исключение
Invalid_argumentеслиnне находится в диапазоне от 0 доWeak.lengthar - 1.
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не обозначают допустимый подмассивar.
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 должно быть способно работать с поверхностной копией значений и давать тот же результат, что и с самими значениями.
Доступ без синхронизации
Доступ без синхронизации к слабым хэшированным множествам — это ошибка программирования. Доступ без синхронизации к слабому хэшированному множеству может привести к недопустимому состоянию слабого хэшированного множества. Следовательно, одновременный доступ к слабым хэшированным множествам должен быть синхронизирован (например, с помощью Mutex.t).
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/5.0/htmlman/libref/Weak.html