On Mon, Dec 14, 2009 at 11:31, Chas Emerick <cemer...@snowtide.com> wrote:
> There are certainly binary incompatibility issues between the
> different versions/branches -- that'll settle out as the core matures,
> and IIUC, especially once c-in-c becomes a reality.
>
> However, only providing libraries as source (non-AOT-compiled) jars
> whenever possible only shifts the problem around.  Interop
> requirements are often known of ahead of time (ha!), but many
> "classloader issues" are totally in the hands of whomever is deploying
> the end application, their java security policy, etc.  In those
> contexts, having only clojure source libraries available in maven
> repos is an active hurdle to usage perhaps as irritating as having to
> unwind "unnecessary" AOT compilation.  Of course, people with a strict
> AOT-compilation requirement can do the AOT-compilation on their own,
> but I for one do not want to see Gentoo-esque norms emerge in the
> Clojure community.
>
> A more general solution would be to encourage library authors to
> produce and deploy both source *and* binary, AOT-compiled artifacts,
> and leave the choice to the library's users.  I set this up on
> Saturday for clutch (a clojure couchdb library and view server) in the
> process of mavenizing the project:
>
> http://github.com/cemerick/clutch/commit/aef461a6fd3c4797aef3b110677197f7351bb831
>
> Then, to depend upon only the source jar in a downstream project, one
> would simply add a 'classifier' element to the dependency element:
>
> <dependency>
>    <groupId>com.ashafa</groupId>
>    <artifactId>clutch</artifactId>
>    <version>1.0-SNAPSHOT</version>
>    <classifier>sources</classifier>
> </dependency>

Hmmm... but in the Clojure world there's a third variant, isn't there?
i.e. something like 'slim' which contains AOT only where required:
namely in the case of genclass or such.

> I think offering both types of artifacts is a much more user-friendly
> approach, is *very* easy to do (assuming maven usage), and resolves
> all of the issues in play here (modulo the clojure.lang binary
> signature incompatibilities that exist, but those should resolve
> themselves in due course).
>
> Cheers,
>
> - Chas
>
> On Dec 13, 5: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
>
> --
> 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

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