为什么clojure比别的基准的scala更糟糕
见
http://shootout.alioth.debian.org/u32q/compare.php?lang=clojure
Clojure比java -server慢得多,而scala不是. 是什么赋予了? 参考:On Performance and Java Interoperability: Clojure vs. Scala 解决方法
你可以用任何语言编写快速或慢速代码:-)
基于对Clojure代码的快速检查,我会说,性能差异的主要原因是Clojure基准代码尚未完全优化,以使用最快的语言功能. 例如,Clojure中的以下功能对于开发方便来说非常酷和有用,但是会产生一些运行时性能开销: > Lazy序列和列表 如果你想要绝对的最大性能(以一些额外的复杂性为代价),你需要重写代码,以避免这些并且使用如下: >静态类型提示(避免反射) 通过明智的使用上述方法,我发现通常可以在Clojure 1.2中非常接近Java性能,例如考虑以下代码做一百万次添加: 未优化的Clojure使用懒惰序列和泛化算术.它的功能非常好,但并不是特别快: (reduce (fn [acc val] (unchecked-int (unchecked-add (int acc) (int val)))) (range 0 1000000)) => "Elapsed time: 65.201243 msecs" 优化的Clojure与原始算术和循环/重现: (loop [acc (int 0) i (int 0)] (if (>= i (int 1000000)) acc (recur (unchecked-add acc i) (unchecked-inc i)) )) => "Elapsed time: 0.691474 msecs" Java代码,一个漂亮的标准迭代循环: public static int addMillion() { int result=0; for (int i=0; i<1000000; i++) { result+=i; } return result; } => "Elapsed time: 0.692081 msecs" 附:我使用unchecked-add而不是在Clojure代码中,以便它匹配Java的整数溢出行为. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |