编辑: The Clojure benchmarks are up on the Benchmarks Game .
我已经在社区维基上提出了这个问题并邀请其他人更新 .
有人知道Clojure表现的基准吗?
我已经做了一些我自己的(虽然没有什么太正式),与其他功能语言(尝试Haskell和OCaml)相比,它不太公平 . 但是,与Java或JVM上的其他语言(例如Scala)相比,它看起来如何呢?它与其他Lisps相比如何?
Computer Language Benchmarks Game论坛上有一些discussion关于在那里添加Clojure,但还没有做任何事情 .
编辑:我将继续添加到此,因为我发现更多:
@igouy在github上指出jjingeringer的clojure are being created的基准脚本 .
来自Clojure讨论组的两个非常相关的主题:
-
Clojure performance tests and clojure a little slower than Java
-
Fibonacci function performance compare between clojure and scala
另外,这些博文:
最后,有关stackoverflow的相关问题:
这些讨论中的大多数让我认为Clojure的性能与JVM上运行的其他语言相比非常有利,尽管毫无疑问,在比较语言时可能很难得出一个广泛的结论,因为它们的性能可能会有很大差异依赖于任务 .
编辑:
Lau Jensen在他的博客上发表了关于使用JVM语言进行基准测试的很好的讨论:"Getting benchmarking right" .
5 回答
见jafingerhut / clojure-benchmarks
iirc当前的clojure实现并未专注于性能,但下一个版本应该会 .
这是一个重要的问题,几乎每个人在考虑clojure之前都会考虑这个问题 . 即使对于没有添加内容的成熟语言(如分块序列),它也是一个难题,它会从根本上改变某些特定(虽然常见)任务的性能 . 我在this thread找到了一些好的东西 . 你发现的许多基准测试都与java和clojure的早期版本有关,所以任何人都不可能找到"really good benchmarks" .
我很好问你自己在这里是 Is Java fast enough . 这是克制足够快的前提条件 . 如果你可以让自己相信这个问题的答案是肯定的,那么可以安全地继续进行Clojure并实现你的分析在Java中识别为瓶颈的部分 . 因为你有一个具有众所周知的性能的故障恢复语言 . 使用Clojure通常是安全的 .
有关性能问题,请参阅此博文:
http://meshy.org/2009/12/13/widefinder-2-with-clojure.html
这显示了WideFinder2挑战的Clojure实现,它比Java,Scala和单线程C更快 . 与官方时间相比 .
关于丹尼尔斯说Clojure永远不会更快,我们看到它基于上面的结果显然是不正确的 . 可变性比Clojures默认的不可变性更快,但Clojure允许局部瞬态(即暂时可变的数据),因此可以实现最佳速度 .
有关许多优化技术,请参阅clj-me.cgrand.net .
总结:Clojure可以像您希望的那样快,同时仍然允许您保持简单优雅和强大的代码库,几乎是一个独特的组合 .
你可能也对Tim Bray的concur.next系列感兴趣 . 他讨论了一些性能问题 .
Clojure永远无法匹配Scala程序,该程序在受益于它的算法中充分利用可变性 . 还有一个事实是Clojure是一种动态语言,目前JVM并不能很好地支持它 .
另一方面,Clojure擅长于实现并行,异步和分布式算法,以及一般而言不可变算法 .
因此,如果您希望(主要)不变性和多核效率,Clojure将使这些更容易实现 . 如果您的算法确实需要大量使用可变性来提高效率,那么Scala将使这些变得更容易 .
介于两者之间的任何事情都可能无关紧要 .