MethodHandles for Kawa and other functional languages?

Per Bothner per at bothner.com
Sun Oct 10 16:38:18 PDT 2010


On 10/10/2010 02:20 PM, Rémi Forax wrote:
> Le 10/10/2010 20:08, Per Bothner a écrit :
>> So we've determined that to make use of 292 Kawa should keep its
>> abstract gnu.mapping.Procedure class, but add a new method:
>>      MethodHandle asMethodHandle()
>>
>> I mis-concluded that the compiler should therefore generate code
>> to call asMethodHandle() and then the MethdHandle#invoke method.
>> However, that doesn't seem like the right way to do it.
>>
>
> Why ?

An example I was considering was:

(define (twice f x)
   (f (f x)))

My initial thought was to compile this as:

public static Object (Procedure f, Object x) {
   MethodHandle f$mh = f.asMethodHandle();
   return f$mh.invoke(f$mh.invoke(x));
}

But this is (presumbly) just using regular method calls,
without any invokedynamoc or special VM magic or callsite specification,
so it wouldn't get the real performance benefit.  To do that
I should generate actual invokedynamic instructions, along
with a suitable CallSite handler, correct?

[More on the rest of your response after I've studied it.]
-- 
	--Per Bothner
per at bothner.com   http://per.bothner.com/


More information about the mlvm-dev mailing list