Clojure が遅いという話
Clojure が遅いという話
遅いケースもあるという認識も持っておいてもらおう。 比較のために今回はPythonと比べてみる。
Clojure
(dotimes [i 5] (time (reduce unchecked-add (map unchecked-add (range 1000000) (range 1000000)))))
Python
import timeit def f (x): return reduce(lambda x, y: x + y, (map (lambda x, y: x + y, xrange(1, x), xrange(1, x)))) r = timeit.timeit("f(1000000)", "from __main__ import f", number = 1) print(r*1000)
結果
両者、かなり似たコードになっているが結果はどうか?
Clojure は初回どうしても遅くなるので 5 回計測。
Clojure
"Elapsed time: 936.786616 msecs" "Elapsed time: 922.82911 msecs" "Elapsed time: 923.171342 msecs" "Elapsed time: 931.944958 msecs" "Elapsed time: 935.293865 msecs"
Python
352.871894836
よく unchecked-xxx 使えみたいな話がありますが、使ってもなお遅いということを覚えておいた方がよさそうですね。