Spec-Zone.ru › OCaml 5.0

Модуль 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-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/Domain.DLS.html

Spec-Zone.ru

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