Clojure LightTable和lein REPL中完成时间之间的差异
我面临着Clojure LightTable和lein REPL中完成时间之间的差异,clojure,leiningen,read-eval-print-loop,lighttable,Clojure,Leiningen,Read Eval Print Loop,Lighttable,我面临着lein repl和LightTable Instarepl(LTIR)在完成时间内的奇怪差异。例如,以下代码: (defn lazy-primes ([] (cons 2 (lazy-seq (lazy-primes 3 [ 2 ])))) ([current calculated-primes] (loop [ [first-prime & rest-primes] calculated-primes] (if (> (* first-prim
lein repl
和LightTable Instarepl(LTIR)在完成时间内的奇怪差异。例如,以下代码:
(defn lazy-primes
([] (cons 2 (lazy-seq (lazy-primes 3 [ 2 ]))))
([current calculated-primes]
(loop [ [first-prime & rest-primes] calculated-primes]
(if (> (* first-prime first-prime) current)
(cons current (lazy-seq (lazy-primes
(inc current)
(conj calculated-primes current))))
(if (= 0 (mod current first-prime))
(lazy-seq (lazy-primes (inc current) calculated-primes))
(recur rest-primes))))))
(time (last (take 10001 (lazy-primes))))
在我的LTIR中:
“运行时间:4535.442412毫秒”
但是在lein repl
中:
“运行时间:431.378074毫秒”
相差十倍左右强>
所以,问题是——为什么会有这么大的差异
LTIR和lein repl的Clojure版本是1.7.0
这段代码不是我的,它来自像这样使用时间会导致非常糟糕的“微基准测试”,因为JVM“预热”功能可能会对运行时间产生很大影响,以及与小数据集相关的所有其他问题
有太多的方式,这个基准可能会受到环境差异的影响,即使在很短的时间内,环境差异也会发生变化,无法直接回答。雨果·邓肯(Hugo Duncan)写了一篇小文章,使用它在两个平台上运行相同的代码可能会得到非常不同的结果。为了补充这一精彩且公认的答案,Light Table还做了一系列其他工作,以便它可以运行Leiningen(运行代码)。所以是的,要花很长时间。