4

非常に長い名前のモジュールの短いエイリアスである新しいモジュールを作成しました。

module M = ModuleWithLongName

最終的な実行可能ファイルのサイズが重要な状況にいます。上記の構成はコンパイラによって正常に処理されますか (つまり、実際には単なるエイリアスです)、またはが定義されているモジュール内のM内容全体を複製しますか?ModuleWithLongNameM

4

3 に答える 3

8

いいえ、OCaml 言語は「真のモジュール エイリアシング」をサポートしていません。

ただし、ファンクターと抽象型のかなり高度な組み合わせを試してみないと、おそらく気付かないでしょう。特に、この問題は型システムでのみ観察でき、プログラムの実行時の動作では観察できません。モジュールがコピーされることもありますが、変更可能な状態はコピー間でエイリアス化されます (例でModuleWithLongName.fooは、変更可能な参照の場合はM.foo同じです)。参照)。

ファーストクラスのモジュールを使用するか、深くネストされた関数でローカル モジュールを定義する場合、モジュールのコピー操作が全体の計算で無視できないコストとして観察される場合があります。ファーストクラスのモジュールのパフォーマンスを推論するための正しいメンタル モデルは、型チェックとモジュール チェックの後では、それらは正確にレコードであるということです。

于 2013-02-21T22:16:42.930 に答える
0

module_path のエイリアスだと思います。

モジュール moduleName = module_expr

そして module_expr ::= module_path | ...

module_expr プロダクション構文を参照してください

于 2013-02-21T23:00:12.423 に答える