Модуль Unit_info
module Unit_info: sig .. end
Этот модуль централизует обработку файлов компиляции и их метаданных.
Возможно, что ещё важнее, этот модуль предоставляет функции для получения имён модулей из строк или имён файлов.
Соглашение об именовании модулей и вычисление имён
type intf_or_impl =
|
| Intf
|
|
| Impl
|
type modname = string
type filename = string
type file_prefix = string
type error =
|
| Invalid_encoding of
|
exception Error of error
val modulize : string -> modname
modulize s переводит первую букву s в верхний регистр.
val normalize : string -> string
normalize s переводит первую букву s в нижний регистр.
val lax_modname_from_source : filename -> modname
lax_modname_from_source filename — это modulize stem, где stem — базовое имя файла filename без всех расширений. Например, lax_modname_from_source "/pa.th/x.ml.pp" — это "X".
val strict_modname_from_source : filename -> modname
То же, что Unit_info.lax_modname_from_source, но вызывает ошибку Unit_info.error.Invalid_encoding, если имя файла содержит данные в недопустимой кодировке UTF-8.
Функция проверки имени модуля
val is_unit_name : modname -> bool
is_unit_name name имеет значение true только в том случае, если name можно использовать как допустимое имя модуля.
Метаданные единицы компиляции
type t
Метаданные единицы компиляции:
- имя модуля, связанное с единицей
- префикс имени файла (dirname + basename без всех расширений) для артефактов компиляции
- входной исходный файл. Например, при вызове
ocamlopt dir/x.mli -o target/y.cmi, - входным исходным файлом является
dir/x.mli - именем модуля является
Y - префиксом является
target/y
val source_file : t -> filename
source_file u — это исходный файл u.
val prefix : t -> file_prefix
prefix u — это префикс имени файла единицы.
val modname : t -> modname
modname u или artifact_modname a — это имя модуля единицы или артефакта компиляции.
val kind : t -> intf_or_impl
kind u — это тип единицы (интерфейс или реализация).
val check_unit_name : t -> unit
check_unit_name u выводит предупреждение, если производное имя модуля modname u не следует использовать в качестве имени модуля согласно Unit_info.is_unit_name ~strict:true.
val make : ?check_modname:bool -> source_file:filename -> intf_or_impl -> file_prefix -> t
make ~check ~source_file kind prefix связывает и source_file, и имя модуля Unit_info.lax_modname_from_source target_prefix с префиксным путём файловой системы prefix.
Если check_modname=true, эта функция выводит предупреждение, если производное имя модуля недопустимо согласно Unit_info.check_unit_name.
module Artifact: sig .. end
Артефакты сборки
Производные метаданные артефактов сборки
val cmi : t -> Artifact.t
Эти функции получают метаданные конкретного artifact из метаданных unit.
val cmo : t -> Artifact.t
val cmx : t -> Artifact.t
val obj : t -> Artifact.t
val cmt : t -> Artifact.t
val cmti : t -> Artifact.t
val annot : t -> Artifact.t
val companion_obj : Artifact.t -> Artifact.t
Приведённые ниже функции меняют тип артефакта, обновляя расширение его имени файла. Эти функции намеренно не охватывают все типы артефактов, поскольку важно отслеживать, какие артефакты предполагается объединять.
val companion_cmt : Artifact.t -> Artifact.t
val companion_cmi : Artifact.t -> Artifact.t
Обратите внимание: companion_cmi a удаляет все расширения из имени файла a перед добавлением суффикса ".cmi", в отличие от остальных функций, которые удаляют только крайнее справа расширение. Иными словами, соответствующий cmi для файла something.d.cmo — это something.cmi, а не something.d.cmi.
Mli и cmi, производные от файлов реализации
Компиляция реализации модуля меняется при наличии файлов mli и cmi; приведённая ниже функция помогает это обрабатывать.
val mli_from_source : t -> filename
mli_from_source u — это имя файла исходного интерфейса, связанного с единицей u. Фактический суффикс зависит от Config.interface_suffix.
val mli_from_artifact : Artifact.t -> filename
mli_from_artifact t — это имя файла исходного интерфейса, полученное из артефакта t. Этот вариант необходим при обработке артефактов, производных от файлов неизвестного исходного кода (например, упакованных модулей).
val is_cmi : Artifact.t -> bool
Проверяет, является ли артефакт cmi
val find_normalized_cmi : t -> Artifact.t
find_normalized_cmi u ищет в load_path файл, соответствующий имени модуля modname u.
-
Вызывает исключение
Not_found, если такой файл cmi не существует
© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/compilerlibref/Unit_info.html