CLJ-713 (
http://dev.clojure.org/jira/browse/CLJ-713) is about
upgrading the ASM library that is bundled with Clojure. I've done some
tests, and it doesn't seem to be a big deal to do so. There is one
change necessary in clojure.reflect.java because ASM moved from
interfaces to abstract classes (changing a reify to proxy).
I've done it with re-rooting ASM and with adding it as a dependency,
and the only additional issue is that when ASM is a dependency the
build.xml and pom.xml need to be modified to pass along the
maven.compile.classpath property to the compile-tests task. The ticket
and the design page (
http://dev.clojure.org/display/design/ASM) both
mention "no longer sub-setting" ASM. I'm not sure what this means.
There are some namespaces that are not re-rooted in Clojure right now,
but they are also not used, so I'm not sure what the value would be in
pulling them in.
Also, the design page says that a future direction would be to split
out the still re-rooted ASM lib into a separate jar that can be left
out on delivery targets where dynamic code gen is not needed. What
would be the value in doing that over just depending on the plain old
ASM lib? Unless there are other implications we would worry about, the
changes to go ahead and depend on ASM now are about the same as
re-rooting it, so I would think we could just go ahead with an
external jar now.
I'm interested in this because I'd like to experiment with modifying
the compiler to emit invokedynamic call sites when reflection is used.
I thought I could go ahead and submit the ASM change even though the
ticket is in currently in the "Approved Backlog."
Any thoughts/concerns about this?
Paul