非常に長い名前のモジュールの短いエイリアスである新しいモジュールを作成しました。
module M = ModuleWithLongName
最終的な実行可能ファイルのサイズが重要な状況にいます。上記の構成はコンパイラによって正常に処理されますか (つまり、実際には単なるエイリアスです)、またはが定義されているモジュール内のM
内容全体を複製しますか?ModuleWithLongName
M
非常に長い名前のモジュールの短いエイリアスである新しいモジュールを作成しました。
module M = ModuleWithLongName
最終的な実行可能ファイルのサイズが重要な状況にいます。上記の構成はコンパイラによって正常に処理されますか (つまり、実際には単なるエイリアスです)、またはが定義されているモジュール内のM
内容全体を複製しますか?ModuleWithLongName
M
いいえ、OCaml 言語は「真のモジュール エイリアシング」をサポートしていません。
ただし、ファンクターと抽象型のかなり高度な組み合わせを試してみないと、おそらく気付かないでしょう。特に、この問題は型システムでのみ観察でき、プログラムの実行時の動作では観察できません。モジュールがコピーされることもありますが、変更可能な状態はコピー間でエイリアス化されます (例でModuleWithLongName.foo
は、変更可能な参照の場合はM.foo
同じです)。参照)。
ファーストクラスのモジュールを使用するか、深くネストされた関数でローカル モジュールを定義する場合、モジュールのコピー操作が全体の計算で無視できないコストとして観察される場合があります。ファーストクラスのモジュールのパフォーマンスを推論するための正しいメンタル モデルは、型チェックとモジュール チェックの後では、それらは正確にレコードであるということです。
module_path のエイリアスだと思います。
モジュール moduleName = module_expr
そして module_expr ::= module_path | ...
module_expr プロダクション構文を参照してください