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