Progress... is slow.

I encouraged other people to try, so the least I can do now is to point you 
at some of the serious challenges.

Right now I have what I think is a nice semi-generic mechanism for 
invokedynamic. It's called the "Linker": it handles finding the target 
method handle, bootstrapping, and what I call "restrapping", which is what 
happens when you guard it with an "ILinkable" (another new interface) and it 
fallbacks when a SwitchPoint is invalidated. There some various MethodHandle 
composing to make sure caller and target are both happy. I hope the "Linker" 
will make is easier to add invokedynamic in Clojure, and possibly in other 
projects.

My real challenge is not there, however, but with adapting Clojure to JVM 7 
more generally. invokedynamic requires V1.7 classes, and for V1.7 the stack 
frame map that was optional in V1.6 is now a requirement. This is overall a 
very good idea for moving the JVM forward (these maps are a huge help for 
HotSpot), but I have no doubt that it will create serious pain for any 
project that generates JVM bytecode and until JVM 7 now could afford to be 
sloppier with stack frames. The V1.7 verifier will simply not let you load 
classes that don't have perfectly aligned maps.

ASM has very nice support for doing the stack frame arithmetic for you, but 
this is still being worked on in ASM 4 (trunk), and is not working in 
Clojure. I'm getting VerifyErrors specifically having to do with the mapping 
of try-catch blocks, and am working on debugging this via close look at 
CheckClassAdapter dumps. It's about as much fun as filling in tax forms. :/

(I've added support for two new defines, -Dclojure.jvm7=true and 
-Dclojure.invokedynamic=true, so each can be turned on separately. To be 
clear, my problems right now are in -Dclojure.jvm7=true and 
-Dclojure.invokedynamic=false.)

I've already patched one tiny part of ASM commons in order to add support 
for invokedynamic, and my work on debugging this may result in a more major 
patch to ASM. Assuming I do manage a fix. :/

So, what can I say? It's the cutting edge, baby. In for a penny, in for a 
pound.

-Tal

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