Spec-Zone.ru › OCaml

Module Local_store

module Local_store: sig .. end

Этот модуль предоставляет средства для создания ссылок (и хеш-таблиц), состояние которых можно легко сохранять в виде снимка и восстанавливать до произвольной версии.

Он используется во фронтенде (то есть в проверяющем типы модуле) для регистрации всего (по крайней мере, будем надеяться) глобального состояния. Благодаря этому таким инструментам, как Merlin, легко переключаться между проверкой типов разных файлов.

Создатели

val s_ref : 'a -> 'a ref

Аналогично Stdlib.ref, за исключением того, что выделенная ссылка регистрируется в хранилище.

val s_table : ('a -> 'b) -> 'a -> 'b ref

Используется для регистрации хеш-таблиц. Их также нужно помещать в ссылки, чтобы их можно было легко заменять, но нельзя просто создать «снимок» исходного значения, чтобы создавать новые экземпляры, поэтому вместо этого требуется функция инициализации.

Используйте это так:

      let my_table = s_table Hashtbl.create 42
    

Управление состоянием

Примечание: все следующие функции в настоящее время не используются в кодовой базе компилятора. На данный момент их единственный пользователь — Merlin.

type store 
val fresh : unit -> store

Возвращает новый экземпляр хранилища.

При первом вызове этой функции создаётся снимок значений всех зарегистрированных ссылок; последующие вызовы fresh будут возвращать экземпляры, инициализированные этими значениями.

val with_store : store -> (unit -> 'a) -> 'a

with_store s f сбрасывает все зарегистрированные ссылки до значений, которые они имели в s на время выполнения f. Если f обновляет какие-либо из зарегистрированных ссылок, s обновляется, чтобы сохранить эти изменения.

val reset : unit -> unit

Сбрасывает все ссылки до исходного снимка (то есть до тех же значений, с которыми создаются новые экземпляры).

val is_bound : unit -> bool

Возвращает true, если хранилище активно (то есть при вызове из обратного вызова, переданного в Local_store.with_store), и false в противном случае.

© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/compilerlibref/Local_store.html

Spec-Zone.ru

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