> De: "Jesper Steen Møller" <jes...@selskabet.org>
> À: "dev" <dev@groovy.apache.org>
> Cc: d...@groovy.incubator.apache.org
> Envoyé: Vendredi 22 Décembre 2017 11:26:06
> Objet: Re: About the native lambda

>> On 22 Dec 2017, at 10.48, Daniel.Sun < [ mailto:sun...@apache.org |
>> sun...@apache.org ] > wrote:

>> The problem I am trying to resolve is how to get the method's name
>> and descriptor? [2] It seems the type flow analysis have to rely on the
>> existing static compilation...

> There is no short cut possible here: You need full static analysis to make
> lambdas Java-compatible and emit the right invokedynamic calls. And the type
> inference is really complicated w.r.t overloads.

> You can read about it here: [
> http://cr.openjdk.java.net/~dlsmith/jsr335-0.6.1/F.html |
> http://cr.openjdk.java.net/~dlsmith/jsr335-0.6.1/F.html ]

> -Jesper

There is a "shortcut" possible, like usually with a dynamic language, you can 
postpone the creation until you have enough data. 

So you create a lambda object but not by emiting the invokedynamic on the 
LambdaMetaFactory, but by creating a new Lambda object (it can be the same 
object as a Closure or not) and when you need to coerce it to a functional 
interface at that time you call the invokedynamic on the LambdaMetaFactory. 

To be able to call the LambdaMetaFactory, the Lambda object need to store a 
MethodHandle on a static method (a constant method handle) and the Lookup 
object used to create the method handle. 

cheers, 
Rémi 

Reply via email to