Spec-Zone.ru › OCaml 4.14

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

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

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

Spec-Zone.ru

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