Spec-Zone.ru › OCaml

Модуль 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 filename
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

Spec-Zone.ru

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