On Mon, Dec 14, 2009 at 07:26, mac <markus.gustavs...@gmail.com> wrote:
> On Dec 13, 11:44 pm, dysinger <t...@dysinger.net> wrote:
>> 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
>
> I've never really used many clojure libs at the same time or even any
> very big ones so maybe I'm mistaken here, but does not AOT compilation
> help startup time?

Yes, it does help considerably with startup time. I got into the habit
of AOT compiling my stuff because my primary development machine has a
1.6GHz Atom and starting up from "slim" builds was too slow for my
taste.

That said, I think Tim's point is well taken. I should back away from
AOT compiling again and see if the performance is still as much of a
problem as I remember.

This issue has also been brought up in connection with leiningen,
which currently AOT-compiles everything as part of its normal build.
My impression is that it would be smarter to be selective about what
gets AOT compiled, and what doesn't.

// Ben

> I know everyone is all internetty and webby these days but I kinda
> like desktop apps myself and those need to start and stop a lot more
> than server apps, which makes such things important.
> Also from a developer point of view working with server software it's
> nice if you can restart things quickly when the system has gotten into
> a bad state because you carelessly deployed something broken on your
> dev machine.
>
> But if the time difference is not noticeable, then I certainly agree
> with you for open source projects.
>
> /Mac

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