This happens for me on a Mac OS X system, and an Ubuntu Linux system,
and with Clojure 1.2.0 and 1.3.0-alpha1. Here are steps for me to
reproduce with Clojure 1.2.0.
Install Leiningen.
% lein new clj-1.2.0
% cd clj-1.2.0
[ Optionally edit project.clj to remove dependency on contrib, leaving
only clojure 1.2.0. This is only necessary if you want to convince
yourself that contrib has nothing to do with it. ]
% ls -l lib
-rw-rw-r-- 1 andy andy 3237168 Sep 24 23:47 clojure-1.2.0.jar
% cat swapping.clj
(defn swapping [#^ints a n]
(let [n (long n)
size-1 (int (dec (count a)))]
(loop [i (long n)
j 0
k 1]
(if (zero? i)
a
(let [temp (int (aget a j))]
(aset a j (aget a k))
(aset a k temp)
(recur (dec i)
(if (zero? j) size-1 (dec j))
(if (zero? k) size-1 (dec k))))))))
(def a1 (int-array 12 (reverse (list 5 7 3 8 2 9 12 10 4 1 6 11))))
(time (vec (swapping a1 100000)))
% java -server -cp lib/clojure-1.2.0.jar clojure.main
[ At this point, regardless of whether I copy and paste the forms in
swapping.clj into this session one by one to evaluate them, or if I do
load-file on it, the forms evaluate and the time reported for the last
one is about 60 msec. ]
% java -client -cp lib/clojure-1.2.0.jar clojure.main
[ Same results as above, again, whether I copy and paste the forms, or
use load-file. The timing results are a little bit different because
of -client vs. -server on the command line, but not much different. ]
% lein repl
[ Here, if I do load-file, the timing results are about the same as
above. But if I copy and paste the forms one at a time, then I get a
time like the one below for the last form:
user=> (time (vec (swapping a1 100000)))
"Elapsed time: 12683.523 msecs"
This is easily reproducible on my system Mac and Linux systems.
Happens every time. This is about 200 times longer than all of the
previously mentioned timing results. ]
Anyone else see this? Or even better, know why it happens?
I normally use SLIME within Emacs to interact with a Clojure session,
but since I was doing some performance analysis of 1.3.0-alpha1 vs.
1.2.0, and swank-clojure doesn't seem to be there yet for 1.3.0-
alpha1, I tried using 'lein repl' instead and copying and pasting
forms into it from the text editor. That is when I noticed something
funny going on.
I can avoid it now that I know about it, but was curious if it was
just me, and if not, how to correct it.
Thanks,
Andy
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
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