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