So in my experiments with using clojure / contrib w/ the "new" branch,
I've noticed a pattern of binary incompatibility.  Jars pushed to
clojars, maven repos and other places that are are unnecessarily
AOTed, don't work with clojure "new".  I noticed the same thing going
from clojure 1.0 to clojure 1.1.0-SNAP.

It doesn't really seem to matter if you include the src "clj" files
along with the class files in your jar.  As soon as clojure hits a
classfile with an older AOTed namespace, it blows up.  This isn't a
criticism of clojure.  Clojure needs it's freedom to innovate.

...but clojure, by default, JIT compile clj files.  I would just like
to start a conversation about using AOT sparingly if you publish your
clojure project as a library.  Ask yourself "why am I AOTing this
namespace? Do I think JIT compiled dynamic clojure is dumb? Is this a
gen-class I need outside clojure in some fancy XML config file? Is
there some classloader issue that makes it necessary to compile AOT ?"
If the answer is NO, then please don't AOT the code.

I went through the pain of 3 days of on/off twiddling with libraries
so our project could use clojure "new".  The hair-pulling details
where in all the code that was AOT when there was no reason to do
this.  99% of time there were no gen-class or anything else to require
it. People just like compiling stuff [ I get the feeling they think it
has some sort of ricer benefit to AOT compile ].  Most clj files work
great with all versions of clojure if you just jar the clj files and
leave class generation for runtime.

Don't get me wrong, there are places where a single namespace or two
are necessarily AOTed for interop or for classloader issues. But just
carte blanche AOT makes it harder on other people using your library -
to the point of trying to remove your library from their dependencies
(trust me - been there).

Code that _could_ run perfectly on clojure 1.0, 1.1.0-SNAP and "new"
are restricted to one version when AOTed and 99% for no reason.

Maybe Rich can comment on where I am missing it.  But I think this is
my stance.

-Tim

-- 
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
Note that posts from new members are moderated - please be patient with your 
first post.
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