Clojure数字运算表现

j-g*_*tus 20 performance benchmarking clojure

我不确定这是属于StackOverflow还是属于Clojure Google小组.但该小组似乎正在忙着讨论Clojure 1.2的数字改进,所以我会在这里尝试:

http://shootout.alioth.debian.org/为各种语言提供了许多性能基准.

我注意到Clojure丢失了,所以我制作了一个关于n体问题的Clojure版本.

我可以在这里找到我能够生成的最快的代码,并且对它进行基准测试似乎是说数字运算Clojure是

  • 因果〜比Python/Ruby/Perl快10倍
  • 因子比C/Java/Scala/Ada慢4倍
  • 与OCaml,Erlang和Go大致相同

我对这种性能表现非常满意.

我对Clojure大师的问题是

  • 无论是在速度方面还是在代码简洁性或可读性方面(不牺牲速度),我是否都有明显的改进?
  • 您是否认为这一方面代表了Clojure性能与Python/Ruby/Perl和另一方面Java/C?

更新

对于枪战更多的Clojure 1.1基准程序在这里,其中包括正体问题.

j-g*_*tus 11

这里没有大量的回复:)但显然有些兴趣,所以我会尝试用我过去几天学到的东西来回答我自己的问题:

  • 使用1.1优化方法(Java原语和可变数组)比优化Java慢4倍,速度和它一样快.
  • 1.2构建definterfacedeftype快两倍多,内〜1.7倍来的Java(+ 70%)比为1.1短,更简单和更干净的代码.

以下是实施:

更多细节,包括"经验教训",JVM版本和剖析截图.

从主观上讲,与优化1.1相比,优化1.2代码是轻而易举的,因此对于Clojure数字运算来说这是一个非常好的消息.(其实接近惊人的:)

1.2测试使用了当前的主分支,我没有尝试任何新的数字分支.从我可以收集目前正在讨论的新想法

  • 可以使非优化数值更快
  • 可能会加速这个基准测试的1.1版本
  • 可能不会加速1.2版本,它已经像它可能获得的那样"接近金属".

免责声明:

  • Clojure 1.2尚未发布,因此1.2基准测试结果是初步的.
  • 这是物理计算的一个特定基准.它与浮点数运算相关,但与字符串解析,并发或Web请求处理等领域的性能无关.


Mic*_*zyk 4

我想知道Cantor是否对您有用——它是 Clojure 的高性能数学库。另请参阅Google 小组上的这个帖子,这是关于新的原始算术内容的类似项目。