Spec-Zone.ru › OCaml

Модуль 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 устанавливает в 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

Spec-Zone.ru

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