gpt4 book ai didi

ocaml - OCaml 编译器是否支持真正的模块别名?

转载 作者:行者123 更新时间:2023-12-04 22:33:16 27 4
gpt4 key购买 nike

我创建了一个新模块,它只是名称很长的模块的较短别名:

module M = ModuleWithLongName

我处于最终可执行文件的大小很重要的情况。上面的构造是由编译器合理处理的吗(即 M 实际上只是一个别名),还是复制了 ModuleWithLongName 的全部内容?在模块里面 M被定义为?

最佳答案

不,OCaml 语言不支持“真正的模块别名”。

但是,在您尝试相当高级的仿函数和抽象类型组合之前,您可能不会注意到。特别是,您只能在类型系统中观察到这个问题,而不是在程序的运行时行为中观察到:模块有时会被复制,但可变状态会在副本之间产生别名(在您的示例中,如果 ModuleWithLongName.foo 是可变引用,那么M.foo 是相同的引用)。

如果您使用一流的模块,或者在深度嵌套的函数中定义本地模块,您可能会观察到模块复制操作是整个计算中不可忽略的成本。推理一流模块性能的正确心智模型是,在类型检查和模块检查之后,它们就是记录。

关于ocaml - OCaml 编译器是否支持真正的模块别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15012401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com