Spec-Zone.ru › OCaml 4.14

Модуль Ephemeron

module Ephemeron: sig .. end

Эфемеронные и слабые хэш-таблицы.

Эфемеронные и слабые хэш-таблицы полезны, когда требуется кэшировать или запоминать результат вычисления функции, при условии, что аргументы и сама функция используются, не создавая утечек памяти, постоянно сохраняя старые результаты вычислений, которые больше не нужны, потому что один из аргументов или функция освобождены. Реализация с использованием Hashtbl.t не подходит, потому что все ассоциации будут сохранять аргументы и результат в памяти.

Эфемеронные объекты также могут использоваться для «добавления» поля к произвольному упакованному значению OCaml: вы можете прикрепить некоторую информацию к значению, созданному внешней библиотекой, без утечек памяти.

Эфемеронные объекты хранят некоторые ключи и одно или ни одного данных. Все они являются упакованными значениями OCaml. Ключи эфемерона ведут себя как слабые указатели в соответствии с сборщиком мусора. Фактически, слабые указатели OCaml реализуются как эфемеронные объекты без данных.

Ключи и данные эфемерона называются полными, если они указывают на значение, или пустыми, если значение никогда не было установлено, было удалено или было удалено сборщиком мусора. В функции, которая получает доступ к ключам или данным, эти два состояния представлены типом option.

Данные считаются сборщиком мусора живыми, если все полные ключи живые и если эфемерон жив. Когда один из ключей больше не считается живым сборщиком мусора, данные освобождаются из эфемерона. Данные могут быть живыми по другой причине, и в этом случае сборщик мусора не освободит их, но эфемерон больше не будет содержать данных.

Эфемеронные объекты усложняют понятие жизнеспособности значений, поскольку оно больше не эквивалентно достижимости из корневого значения обычными указателями (не слабыми и не эфемеронными). С эфемеронными объектами понятие жизнеспособности строится с помощью наименьшей фиксированной точки: значение является живым, если:

  • это корневое значение
  • оно достижимо из живого значения с помощью обычных указателей
  • это данные живого эфемерона со всеми его полными ключами, которые живы

Примечания:

  • Все типы, определенные в этом модуле, не могут быть сериализованы с помощью output_value или функций модуля Marshal.

Эфемеронные объекты определены в этой статье с независимым от языка способом: B. Hayes, Эфемеронные объекты: новый механизм финализации, OOPSLA'97

  • Since 4.03.0
module type S = sig .. end

Подпись вывода функторов Ephemeron.K1.Make и Ephemeron.K2.Make.

module type SeededS = sig .. end

Подпись вывода функторов Ephemeron.K1.MakeSeeded и Ephemeron.K2.MakeSeeded.

module K1: sig .. end

Эфемеронные объекты с одним ключом.

module K2: sig .. end

Эфемеронные объекты с двумя ключами.

module Kn: sig .. end

Эфемеронные объекты с произвольным количеством ключей одного типа.

module GenHashTable: sig .. end

Хэш-таблицы на универсальных контейнерах с понятием смерти и жизнеспособности.

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/libref/Ephemeron.html

Spec-Zone.ru

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