On 19.10.2016 12:21, Remi Forax wrote: [...]
The main issue i see of having one semantics is that the meaning of 'this' in a Groovy closure means the closure itself while 'this' in a Java lambda means the enclosing object, so { -> this } in Groovy is a substitute to () -> this in Java.
that is not the case anymore in any version since 1.0. We do make a difference between the implicit and the explicit this though. The implicit this has a cofigurable meaning, while the explicit this always points to the enclosing class. So if you do {-> toString()}, you may get the toString() of the Closure, the enclosing class, the owner (which might be an enclosing closure) or the delegate. Which is why with static compilation we have to do tricks here.
[...]
That said, the lambda metafactory takes a desugared lambda as argument (a plain old static method, apart in corner cases), so choosing the semantics of the lambda in Groovy is orthogonal to the choice of using the lambda metafactory or not.
if in a first step we map to Closure, then we won´t use the lambda metafactory. If we do Closures similar to lambdas (which basically means to get rid of Closure) Then the "resolution scope" for the implicit this would have to become part of the method we map to
bye Jochen