On Thu, Sep 30, 2010 at 9:13 PM, ataggart <alex.tagg...@gmail.com> wrote:
> As with most microbenchmarks you're measuring the test more than the
> subject.  In the above case the seq generation dominates.
>
> Compare the following on my machine:
> user=> (time (doseq [x (range 100000)] (bit-shift-left x 1)))
> "Elapsed time: 3531.198 msecs"
> nil
> user=> (time (dotimes [x 100000] (bit-shift-left x 1)))
> "Elapsed time: 3.744 msecs"
> nil

But if you replace the bit-shift-left operation with some other
arithmetic operation in the doseq expression, it is quite fast, thus
disproving your assertion that the slowdown is caused by the overhead
of doseq.  Furthermore, as we've already discussed, type hinting the x
or removing the inline delcaration from bit-shift-left makes the
problem go away -- inside the doseq expression.

So, if it is true that range produces objects and dotimes produces
primitive longs, then I believe that it is the odd interaction between
bit-shift-left's inlining and long objects (as opposed to primitives)
that is causing the disparity in your measurements, not something
inherent in the mechanism of doseq vs dotimes.

-- 
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