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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---