某些函数在OCaml中很容易实现(例如,从列表映射),但您可以使用OCaml库的映射:List.map
但是,我们可以想知道哪些代码会更有效率。调用单独编译单元(库)的模块可能会使某些可能的优化无效。我在新闻组fa.caml中读到,当从库中调用函数时,会使用闭包。
我在生产中使用了OCaml代码,它使用Modules和Functors进行泛型编程。由于历史原因,我的代码是单一的:全部在一个文件中。现在我有更多时间,我愿意将代码分成这些模块的文件。但是,我担心我会失去性能,因为我花了一段时间才能把它弄好。例如,我有用于使用数字包装复杂对象的模块,因此我强制执行唯一的表示和快速比较。我使用那些带有通用Maps,Sets和构建缓存的包装对象。
问题是:
在C ++中,如果在.h中定义类方法,编译器可能会最终内联短方法等。是否可以使用分隔文件在OCaml中实现?
答案 0 :(得分:9)
您可能会失去一些表现。但是,有两个缓解因素:
我不知道OCaml是否在同一源文件中定义了仿函数的代码。如果没有,那么模块不应该添加任何高于函子已经产生的性能。
一般来说,我认为最好编写直观,易读,可维护的代码,不要过分担心像这样的微观性能特征,除非代码在实践中证明太慢。