有没有好的Clojure基准测试?

时间:2010-02-02 18:50:49

标签: java scala functional-programming clojure performance

编辑: Clojure基准测试已经开始the Benchmarks Game

我已将此问题发布为社区维基,并邀请其他人更新。


有人知道Clojure表现的基准吗?

我已经做了一些我自己的(虽然没有太正式),与其他功能语言(尝试Haskell和OCaml)相比,它不太公平。但是,与Java或JVM上的其他语言(例如Scala)相比,它看起来如何呢?它与其他Lisps相比如何?

discussion论坛上有一些Computer Language Benchmarks Game关于在那里添加Clojure,但还没有做任何事情。

编辑:我会继续添加这个,因为我发现更多:

@igouy在github上指出jafingerhut的clojure are being created的基准脚本。

来自Clojure讨论组的两个非常相关的主题:

另外,这些博文:

最后,有关stackoverflow的相关问题:

这些讨论中的大多数让我认为Clojure的性能与JVM上运行的其他语言相比是非常有利的,尽管毫无疑问,在比较语言时可能很难得出一个广泛的结论,因为它们的性能根据任务的不同,可能会有很大的不同。

编辑:

Lau Jensen刚刚在他的博客"Getting benchmarking right"上发表了关于使用JVM语言进行基准测试的精彩讨论。

5 个答案:

答案 0 :(得分:11)

请参阅jafingerhut / clojure-benchmarks

iirc 当前的clojure实现并未专注于性能,但下一个版本应该是。

答案 1 :(得分:8)

这是一个重要的问题,几乎每个人在考虑clojure之前都会考虑这个问题。即使对于没有添加内容的成熟语言(如分块序列),它也是一个难题,它会从根本上改变某些特定(虽然常见)任务的性能。我在this thread找到了一些好的东西。你发现的许多基准测试都与java和clojure的早期版本有关,所以任何人都不可能找到“非常好的基准测试”。

我很高兴在这里问你自己 Java足够快。这是克制足够快的前提条件。如果你可以让自己相信这个问题的答案是肯定的,那么可以安全地继续进行Clojure并实现你的分析在Java中识别为瓶颈的部分。因为你有一个具有众所周知的性能的故障恢复语言。使用Clojure通常是安全的。

答案 2 :(得分:8)

有关性能问题,请参阅此博文:

http://meshy.org/2009/12/13/widefinder-2-with-clojure.html

这显示了WideFinder2挑战的Clojure实现,它比Java,Scala和单线程C更快。与官方时间比较。

关于丹尼尔斯说Clojure永远不会更快,我们看到它基于上面的结果显然是不正确的。可变性比Clojures默认的不可变性更快,但Clojure允许局部瞬态(即暂时可变数据),因此可以实现最佳速度。

有关许多优化技术,请参阅clj-me.cgrand.net。

总之:Clojure可以像您希望的那样快,同时仍然允许您维护一个简单优雅和强大的代码库,几乎是一个独特的组合。

答案 3 :(得分:2)

你可能也对Tim Bray的concur.next系列感兴趣。他讨论了一些性能问题。

答案 4 :(得分:1)

Clojure永远无法匹配Scala程序,该程序在受益于它的算法中充分利用可变性。还有一个事实是Clojure是一种动态语言,目前JVM还没有很好地支持它。

另一方面,Clojure擅长启用并行,异步和分布式算法,以及通常不可变算法。

因此,如果您希望(主要)不变性和多核效率,Clojure将使这些更容易实现。如果您的算法确实需要大量使用可变性来提高效率,那么Scala将使这些变得更容易。

介于两者之间,无论哪种方式都无关紧要。