BTW your "50000" literal is boxed, which is causing slowness: user> (time (dotimes [n 5000] (loop [accum (int 0) i (int 0)] (if (< i (int 50000)) (recur (+ accum i) (inc i)) accum)))) "Elapsed time: 861.027 msecs"
On Mar 13, 10:59 am, CuppoJava <patrickli_2...@hotmail.com> wrote: > Hi, > I just ran these two microbenchmarks, where I attempted to measure the > overhead in Clojure's loop-recur form as compared to just mutating an > array. > > ;;loop-recur (5300 msecs) > (time > (dotimes [n 5000] > (loop [accum (int 0) i (int 0)] > (if (< i 50000) > (recur (+ accum i) (inc i)) > accum)))) > > ;;int-array (2910 msecs) > (time > (dotimes [n 5000] > (let [a (int-array 1)] > (dotimes [i 50000] > (aset a 0 (+ i (aget a 0))))))) > > Because of these results, I think it's worthwhile to be able to access > a mutable location directly from within Clojure, such as a mutable > primitive. > > Right now, I'm making do with a set of macros for creating and > manipulating 1 element arrays. But this incurs a cost of creating > those arrays when I really just want a mutable primitive. > > What is everyone's opinion on this? Are mutable primitives still seen > as unnecessary? Or are they seen as necessary but not an immediate > concern? > > -Patrick -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en