Spec-Zone.ru › OCaml

Модуль Domain.DLS

module DLS: sig .. end

Локальное хранилище домена

type 'a key 

Тип ключа DLS

val new_key : ?split_from_parent:('a -> 'a) -> (unit -> 'a) -> 'a key

new_key f возвращает новый ключ, связанный с инициализатором f для доступа к локальным переменным домена.

Если split_from_parent не предоставлен, значение для нового домена будет вычислено по требованию новым доменом: первый вызов get вызовет инициализатор f и сохранит это значение.

Если split_from_parent предоставлен, создание домена будет выводить значение дочернего элемента (для этого ключа) из родительского значения. Это вычисление происходит в родительском домене и всегда происходит, независимо от того, будет ли дочерний домен его использовать. Если функция разделения сложная или требует вычисления на стороне дочернего элемента, рассмотрите использование 'a Lazy.t key:

        let init () = ...

        let split_from_parent parent_value =
          ... parent-side computation ...;
          lazy (
            ... child-side computation ...
          )

        let key = Domain.DLS.new_key ~split_from_parent init

        let get () = Lazy.force (Domain.DLS.get key)
        

В этом случае часть вычисления происходит в дочернем домене; в частности, он может получить доступ к parent_value одновременно с родительским доменом, что может потребовать явной синхронизации для предотвращения гонок данных.

val get : 'a key -> 'a

get k возвращает v если значение v ассоциировано с ключом k в локальном состоянии домена вызывающего домена. В противном случае устанавливает значение k с помощью своего инициализатора и возвращает его.

val set : 'a key -> 'a -> unit

set k v обновляет локальное состояние вызывающего домена, чтобы связать ключ k со значением v. Это перезаписывает любые предыдущие значения, связанные с k, которые нельзя восстановить позже.

© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/Domain.DLS.html

Spec-Zone.ru

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