The following program compiles and runs perfectly fine in both 1.2 and
1.3 alpha1. It has no reflection warnings in 1.2, but it does in 1.3
alpha1. I have tried several variations, but I haven't yet been able
to figure out how to write type declarations that avoid reflection in
1.3 alpha1. Does anyone know whether this is a bug?
Or perhaps code like this ought to be structured completely
differently in order to avoid reflection, and it was just a fluke that
it worked in 1.2?
Thanks,
Andy
(ns nbody
(:gen-class))
(set! *warn-on-reflection* true)
(definterface IBody
(^double x [])
(^double y [])
(^double z [])
(^double dist [other]))
(deftype Body [^{:unsynchronized-mutable true :tag double} x
^{:unsynchronized-mutable true :tag double} y
^{:unsynchronized-mutable true :tag double} z ]
IBody
(x [this] x)
(y [this] y)
(z [this] z)
(dist [this other]
(let [^Body nbody other
dx (- x (.x nbody)) ; first reflection warning here
dy (- y (.y nbody)) ; second here
dz (- z (.z nbody)) ; third here
dsq (+ (* dx dx)
(+ (* dy dy)
(* dz dz)))]
(Math/sqrt dsq))))
(defn -main [& args]
(let [b (Body. 0 0 0)]
(println "pos:" (.x b) (.y b) (.z b))))
--
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