Spec-Zone.ru › OCaml 5.0

Модуль 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.length ar - 1.
val get : 'a t -> int -> 'a option

Weak.get ar n возвращает None, если n-я ячейка ar пустая, и Some x (где x — значение), если она полная.

  • Возбуждает исключение Invalid_argument если n не находится в диапазоне от 0 до Weak.length ar - 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.length ar - 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.length ar - 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API