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 <[email protected]> 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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en