编辑: 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语言进行基准测试的精彩讨论。
答案 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将使这些变得更容易。
介于两者之间,无论哪种方式都无关紧要。