2013-02-21 103 views
4

我創建了一個新的模塊,這僅僅是一個更短的別名,一個模塊一個很長的名字:OCaml編譯器是否支持真正的模塊別名?

module M = ModuleWithLongName 

我在的情況下最終的可執行事項的大小。是由編譯器處理三立上述構建體(即M實際上只是一個別名),或者它複製,其中M定義的ModuleWithLongName模塊內的全部內容?

回答

8

不,OCaml語言不支持「真實模塊別名」。

但是,您可能不會注意到,直到您嘗試相當先進的仿函數和抽象類型的組合。特別是,你只能在類型系統中觀察這個問題,而不是在程序運行時行爲:模塊有時也被複制,但可變的狀態將副本之間的別名(在你的榜樣,如果ModuleWithLongName.foo是一個可變的引用,然後M.foo被相同的參考文獻)。

如果使用一流的模塊,或者在底層嵌套函數中定義本地模塊,你可以觀察模塊複製操作在整體計算非neglectible成本。推理一流模塊性能的正確心理模型是,在進行類型檢查和模塊檢查之後,它們就是記錄。

0

一個module_path的別名,我想。

模塊MODULENAME = module_expr

而且module_expr :: = module_path中| ...

module_expr production syntax

相關問題