Is there any reason to keep aset-* functions around in Clojure?  I
guess backwards compatibility?

It definitely seems worth flagging them when *warn-on-reflection* is
true, in a similar way to other warnings it enables.  Perhaps that
might be overloading the meaning of *warn-on-reflection*, but I think
there is definitely value in having _one_ flag you can turn on that
gives you as many kinds of performance warnings as we know how to
give.

Andy

On Sep 6, 7:49 am, Nicolas Oury <nicolas.o...@gmail.com> wrote:
> Hello,
>
> >         (aset-byte dst dst-offset (byte sample))
>
> Most of the time, aset is faster than aset-TYPE. Especially when, like here, 
> types are known.
> If you profile your code, you should see most of the time is in 
> Reflect.Array.set or something similar, and that should disappear
> if you want your code to perform well.
>
> Best,
>
> Nicolas.
>
> >         (aset-byte dst (inc dst-offset) (byte (bit-shift-right sample
> > 8))))
> >       (recur (inc src-offset) (unchecked-add 2 dst-offset)))))
>
> > Adding type coercions helped a bit but it's still too slow. In Java
> > I wrote this method:
>
> >  public static void shortsToBytes(short[] src, byte[] dst, int len)
> >  {
> >    int idx = 0;
> >    short s;
>
> >    while (len-- > 0) {
> >      s = src[idx];
> >      dst[idx*2] = (byte)s;
> >      dst[idx*2+1] = (byte)(s>>>8);
> >      idx++;
> >    }
> >  }
>
> > Then I timed them under both Clojure 1.0 and 1.1.0-SNAPSHOT and got
> > similar results.
>
> > [...]
> > (doseq [n (range 5)]
> >  (time (shorts-to-bytes a b 512000))
> >  (time (ArrayConverter/shortsToBytes a b 512000))
> >  (println))
>
> > "Elapsed time: 516.527512 msecs"
> > "Elapsed time: 32.316904 msecs"
>
> > "Elapsed time: 472.034037 msecs"
> > "Elapsed time: 5.096593 msecs"
>
> > "Elapsed time: 437.755411 msecs"
> > "Elapsed time: 4.10872 msecs"
>
> > "Elapsed time: 535.864767 msecs"
> > "Elapsed time: 3.106442 msecs"
>
> > "Elapsed time: 880.127444 msecs"
> > "Elapsed time: 3.124339 msecs"
>
> > So Java outperforms Clojure by two orders of magnitude.
>
> > Is there anything wrong with my code? I've been fine-tuning this code
> > for a couple of days now, to no avail.
>
> > Thank you and keep up!
> > Matt.
--~--~---------~--~----~------------~-------~--~----~
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