大致答案:
- Scala的静态类型在这里帮助了很多工作-这意味着它可以非常有效地使用JVM,而无需花费过多的精力。
- 我不确定Ruby / Python的区别,但我怀疑在Ruby
(2...n).all?
中该函数is-prime?
可能已进行了很好的优化(编辑:听起来确实如此,请参阅Julian的答案以获取更多详细信息…) - Ruby 1.9.3进行了更好的优化
- Clojure代码当然可以加速很多!虽然Clojure在默认情况下是动态的,但在许多情况下,您可以使用类型提示,原始数学等来接近Scala /纯Java速度。
Clojure代码中最重要的优化是在中使用类型化的原始数学
is-prime?,例如:
(set! *unchecked-math* true) ;; at top of file to avoid using BigIntegers(defn ^:static is-prime? [^long n] (loop [i (long 2)] (if (zero? (mod n i)) false (if (>= (inc i) n) true (recur (inc i))))))
有了这一改进,我让Clojure在0.635秒内完成了10k(即,在您的列表中排名第二快,击败Scala)
PS 请注意,在某些情况下,您可能会在基准测试中打印代码-
这不是一个好主意,因为它会使结果失真,尤其是



