hg: valhalla/valhalla/jdk: Initial implementation of metacircular interpreter

Brian Goetz brian.goetz at oracle.com
Sun Aug 23 16:53:19 UTC 2015


> very true, everyone should try to write such interpreter at least once, with lambdas and method handles it's exhilarating !

Yes.  The MH runtime probably replaced what would otherwise be 1000 
lines of code to handle all the peculiarities of method dispatch. 
Instead, we just ask resolveOrFail to resolve the dispatch for us, and 
then use revealDirect to determine if this is a call we can interpret 
(and if not, just invoke() the resulting MH, and push the result on the 
interpreter frame.)  Even supporting indy was only about 15 LoC.  The 
overall result was impressive; most bytecodes took 1 LoC and even the 
hardest ones took no more than 15.

It's not complete; we're missing a few opcodes (xxxSWITCH) and exception 
handling is a total mess (actually, a partial mess, since some of it is 
simply missing.)



More information about the valhalla-dev mailing list