模組 Unit_info

module Unit_info: sig .. end

此模組集中處理編譯檔案及其元數據。

或許更重要的是,此模組提供從字串或檔案名稱衍生模組名稱的函式。


模組名稱慣例和計算

type modname = string 
type filename = string 
type file_prefix = string 
val modulize : string -> modname

modulize ss 的第一個字母大寫。

val normalize : string -> string

normalize ss 的第一個字母小寫。

val modname_from_source : filename -> modname

modname_from_source filenamemodulize stem,其中 stem 是檔案名稱 filename 的基本名稱,已移除所有副檔名。例如,modname_from_source "/pa.th/x.ml.pp""X"

模組名稱驗證函式

val is_unit_name : modname -> bool

is_unit_name ~strict name 只有在 name 可以用作有效的模組名稱時才為 true。

編譯單位的元數據

type t 

編譯單位的元數據

  • 與單位關聯的模組名稱
  • 編譯產物的檔案名稱前綴 (目錄名稱 + 基本名稱,已移除所有副檔名)
  • 輸入來源檔案。例如,當呼叫 ocamlopt dir/x.mli -o target/y.cmi 時,
  • 輸入來源檔案是 dir/x.mli
  • 模組名稱是 Y
  • 前綴是 target/y
val source_file : t -> filename

source_file uu 的來源檔案。

val prefix : t -> file_prefix

prefix u 是單位的檔案名稱前綴。

val modname : t -> modname

modname uartifact_modname a 是單位或編譯產物的模組名稱。

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 -> file_prefix -> t

make ~check ~source_file prefixsource_file 和模組名稱 Unit_info.modname_from_source target_prefix 與前綴檔案系統路徑 prefix 相關聯。

如果 check_modname=true,則如果衍生模組名稱根據 Unit_info.check_unit_name 無效,則此函式會發出警告。

module Artifact: sig .. end

建置產物

衍生的建置產物元數據

val cmi : t -> Artifact.t

這些函式從 unit 元數據衍生特定的 artifact 元數據。

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_cmi : Artifact.t -> Artifact.t

以下函式透過更新其檔案名稱的副檔名來變更產物的類型。這些函式刻意不涵蓋所有產物種類,因為我們想追蹤哪些產物假設會捆綁在一起。

val companion_obj : Artifact.t -> Artifact.t
val companion_cmt : Artifact.t -> Artifact.t

從實作檔案衍生的 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 比對的檔案。