gpt4 book ai didi

compilation - OCaml 编译速度和仿函数

转载 作者:行者123 更新时间:2023-12-02 07:56:40 25 4
gpt4 key购买 nike

在 OCaml 中使用仿函数本质上是在编译时运行代码(这样我认为它们更接近 C++ 模板,然后更接近 Java 泛型)。

因此我的问题是:编译器在编译它们之前是否执行任何优化,或者它是否立即开始生成代码或是否尝试预先执行任何优化?

这个问题比看起来更实际。我经常使用 Map.Make 或类似的仿函数来为给定类型生成映射/哈希表/等。当我在多个模块中使用它时,我开始担心,因为我认为编译器将开始多次执行相同的操作(并且编译速度开始成为我的问题,尤其是来自脚本语言背景) 。那么我需要担心吗?或者,如果我在多个模块中执行 Map.Make(MyModule) ,编译器会说“哦,我刚刚用这种类型编译了这个仿函数,我可能不需要再做一次?”

是的,我知道我可以有一个单独的 utils 模块并在其中运行所有仿函数,但我通常会尽量避免使用类似厨房水槽的 utils 模块。

最佳答案

would compiler be able to say "ohai I've just compiled this functor with this type I probably don't need to do it again?"

您正在考虑 C++ 编译器通常编译模板的方式。 ocamlcocamlopt 的编译方案会生成不需要重复的通用代码。

OCaml 仿函数 Map.Make 对于它可能应用到的所有模块仅编译一次。当您从 Map.Make(String) 调用 iter 和从 Map.Make(Float)< 调用 iter 时,会执行相同的代码。或者确实当您从 Map.Make 的两个不同应用程序运行 iterString 时。

关于compilation - OCaml 编译速度和仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22833563/

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