Skip to content

Instantly share code, notes, and snippets.

@jfacorro
Last active June 10, 2020 09:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jfacorro/847448a51819675051c80b2a27d43c53 to your computer and use it in GitHub Desktop.
Save jfacorro/847448a51819675051c80b2a27d43c53 to your computer and use it in GitHub Desktop.
Reducers Comparison
(require '[clojure.core.reducers :as r])
(defn wait [millis]
#?(:clj (Thread/sleep millis)
:clje (timer/sleep millis)))
(defmacro times
{:added "1.0"}
[& exprs]
`(do
~@(for [expr exprs]
`(let [start# #?(:clj (. System (nanoTime))
:clje (erlang/monotonic_time :nano_seconds))
ret# ~expr
stop# #?(:clj (. System (nanoTime))
:clje (erlang/monotonic_time :nano_seconds))]
(println ret#
(str "(" (/ (- stop# start#) 1000000.0)
" msecs)"))))))
(defn t1 []
(let [x (vec (range 1000000))]
(times (r/fold + + x)
(r/reduce + x)
(reduce + x))))
(t1)
;; Clojure 1.8 - JVM 1.8
user=> (load-file "reducers.cljc")
499999500000 (5.646464 msecs)
499999500000 (10.339637 msecs)
499999500000 (11.566281 msecs)
nil
;; Clojure 0.6.0-1962.08bd5b3 - Erlang OTP 22.2
clje.user=> (load-file "reducers.cljc")
499999500000 (3484.922 msecs)
499999500000 (198.954 msecs)
499999500000 (152.782 msecs)
nil
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment