dat*_*olf 55 benchmarking ocaml haskell
我花了18个月的时间来掌握函数式编程,从学习OCaml开始,现在已经有几个星期的Haskell了.现在我想采取下一步并实现一些实际的应用程序:一个简单的实时地形编辑器.我写了很多实时地形渲染引擎,所以这是一个熟悉的主题.使用的递归算法和数据结构似乎非常适合功能实现.
由于这是一个实时应用程序,我自然而然地寻找我能得到的最佳性能.现在,与OCaml或F#相比,OCaml的一些(恕我直言,非常烦人)支持者反对Haskell的频率很慢.但根据计算机语言基准测试游戏 Haskell经常击败OCaml,如果只是相当小的分数 - 仍然存在问题,这个基准测试只需要非常具体的样本.
正确的做法当然是用两种语言实现程序并进行比较,但我根本不想做双重工作.
但也许其他人在OCaml和Haskell中做了类似的应用程序并提供了一些数据?
scl*_*clv 60
从各方面来看,OCaml和Haskell都具有足够高性能的编译器和几乎任何运行时.在纯粹的表现基础上挑选他们对我来说似乎很愚蠢.你已经走到了这一步 - 以更清晰,更简洁,更具表现力,更高级别的代码的名义远离显然最低级别和高性能的语言(C,C++等).那么,为什么当涉及的性能差异要小得多时,现在就改用这个标准呢?
我会选择一些更广泛的标准 - 如果你想要普遍的并行性,那么Haskell是更好的选择.如果你想要真正普遍的变异,那么OCaml会更好.
如果你只想要非常粗略的并行性,并且你打算坚持使用大多数功能结构,那么选择基于其他东西,比如语法(我认为Haskell在这里更好,但这是主观的)或可用的库(Haskell在数量上获胜) /可用性,但OCaml可能会在图形部门中将其排除在外.)
我认为你不会出错
Nor*_*sey 38
在两位非常聪明的同事的帮助下,我在Objective Caml和Haskell中编写了一个数据流优化库.Haskell版本更具多态性,具有更多的编译时类型检查,因此运行时检查更少.OCaml版本使用可变状态来累积数据流事实,本周可能更快或更慢,具体取决于月相.关键的事实是,在他们的预期应用程序中,两个库都非常快,以至于它们不值得愚弄.也就是说,在各自的编译器(Quick C--和GHC)中,在数据流优化中花费的时间很少,因此代码不值得改进.
标杆是地狱.
igo*_*ouy 24
我写了很多实时地形渲染引擎,所以这是一个熟悉的主题.
熟悉,知道大部分时间花在哪里?
如果是这样,那么也许你可以编写代码,只是那部分在不同的语言和比较.
但是根据计算机语言基准游戏Haskell经常击败OCaml,如果只是相当小的分数 - 仍然存在问题,这个基准测试只需要非常具体的样本.
基准测试游戏报告了4组结果 - 一个核心和四核,32或64位Ubuntu - 你可能会发现OCaml或Haskell基准测试程序的性能越来越差,具体取决于平台.
所有基准测试都可以采用非常具体的样本,当然,您应该忽略与大多数时间将花费在您的应用程序中的任务的比较 - 大整数算术?正则表达式?字符串? - 并查看与您打算做的最相似的比较.
Chu*_*uck 19
根据我看到的所有数据,它们大致相当.您编写的代码将比语言本身产生更大的差异.
Jon*_*rop 19
有趣的问题.这个全行星地形渲染器是我在迁移到OCaml之前用C++编写的最后一个程序之一.回想起来,使用OCaml编写程序要比使用C++容易得多.Haskell应该让它变得相对容易,但是在Haskell中编程通常要难得多.理论上,Haskell对多核的支持更好,但实际上,即使是专家也很少使用Haskell进行并行编程.
此外,对于实时应用程序,您还需要来自垃圾收集器的低暂停时间.OCaml有一个很好的增量收集器,导致几乎没有超过30ms的暂停,但是,IIRC,GHC有一个停止世界的收集器,导致任意长的暂停.
我假设您使用Linux或F#将是比OCaml或Haskell更好的选择.
编辑:如果你想研究枪战,那么请务必阅读源代码.您可能还会发现有关它的Haskell维基页面.
归档时间: |
|
查看次数: |
23525 次 |
最近记录: |