Am 12.01.2018 um 04:05 schrieb Daniel Sun:
Hi Nathan,

What's will the differences be between closures and lambdas?
The native lambda will have better performance than closure. In addition,
native lambda, which conforms to Java specification,  is less versatile than
closure, which is really powerful...

but I think you should then not use the closure inner class mechanism. I had a bit a look at your code, but there is a ton of things missing. I did also not understand the innclass attribute visit... I thought you need that only to enable reflection to find your inner classes. MethodHandles.Lookup is no such thing. And then I would also question the early transformation you do where you store the lambda as body in a method node... which resides in the current class and which may have a name conflicting with an existing name... and a name check is something I would not do in that ast builder. In fact I would do this logic just before or even in ACG. Otherwise you will always have trouble with code that transforms the lambda expression. And then again we miss totally the handling of local variables, not in the lambda. And actually there is a performance related decision to do here. if we follow the closure logic, there will be a wrapper containing the value of the local variable, which is then used in the lambda. This costs. Not much, but it does. Since in Java you have only quasi final variables allowed, you do not need any wrapper. Not using the wrapper means less Closure implementation code we can use. But this wrapper also has quite special handling in many areas, like the VariableScopeVisitor. Oh yes... should you go with one inner class for all lambdas, then you have to add bridge methods to be able to access private fields in the outer class.

bye Jochen

Reply via email to