Модуль 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 устанавливает в el все указатели ar с ofs по ofs + len - 1.
-
Возбуждает
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-2024 INRIA.
https://ocaml.org/manual/5.2/api/Weak.html