Should I add this to the list of issues in the Google Code tracker?

Vincent.

On Feb 12, 4:15 pm, Vincent Foley <vfo...@gmail.com> wrote:
> Hello,
>
> I was surprised today to see that my Starcraft replay program became
> slower when I updated my Clojure working copy.  About a week ago,
> Chouser helped me adding type hints to avoid reflection in my
> functions.  The warnings came back today.
>
> I started going through the different revisions of Clojure starting at
> r1260 and I found that the warnings (and slowness) appear starting at
> r1265:
>
> ------------------------------------------------------------------------
> r1265 | richhickey | 2009-02-10 12:24:20 -0500 (Tue, 10 Feb 2009) | 1
> line
> Changed paths:
>    M /trunk/src/clj/clojure/core.clj
>
> added inlining on remaining coercions
> ------------------------------------------------------------------------
>
> I have created a small demo program with my functions to show the
> difference.  Here is the program and the output with r1264 and r1265.
>
> (set! *warn-on-reflection* true)
>
> (ns slowdemo
>   (:import [java.nio ByteBuffer]))
>
> (defn get-byte
>   [#^ByteBuffer buf]
>   (let [x (byte (.get buf))]
>     (short (bit-and x 0xff))))
>
> (defn get-short
>   [#^ByteBuffer buf]
>   (let [x (short (.getShort buf))]
>     (int (bit-and x 0xffff))))
>
> (defn buf []
>   (ByteBuffer/wrap (into-array Byte/TYPE (map byte (range 256)))))
>
> (println "get-byte")
> (time
>  (dotimes [i 100]
>    (let [b (buf)]
>      (dotimes [j 256]
>        (get-byte b)))))
>
> (println "get-short")
> (time
>  (dotimes [i 100]
>    (let [b (buf)]
>      (dotimes [j 128]
>        (get-short b)))))
>
> $ time java -server -cp $HOME/src/clojure-old/clojure.jar:.
> clojure.main slowdemo.clj
> get-byte
> "Elapsed time: 308.339245 msecs"
> get-short
> "Elapsed time: 188.635614 msecs"
> real: 3.946s; user: 2.720s; sys: 1.064s; CPU: 95.89%
>
> $ time java -server -cp $HOME/src/clojure-old/clojure.jar:.
> clojure.main slowdemo.clj
> Reflection warning, line: 9 - call to and can't be resolved.
> Reflection warning, line: 14 - call to and can't be resolved.
> get-byte
> "Elapsed time: 2765.621864 msecs"
> get-short
> "Elapsed time: 1134.288161 msecs"
> real: 7.400s; user: 4.928s; sys: 2.196s; CPU: 96.27%
--~--~---------~--~----~------------~-------~--~----~
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
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