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

Reply via email to