Closure implementation

Osvaldo Pinali Doederlein opinali at gmail.com
Wed Dec 16 03:21:53 PST 2009


Em 15/12/2009 17:20, Neal Gafter escreveu:
> On Tue, Dec 15, 2009 at 10:03 AM, Osvaldo Doederlein 
> <opinali at gmail.com <mailto:opinali at gmail.com>> wrote:
>
>     I wish closures to be as lightweight as possible. This means:
>     a) The classes that closures are translated to, should be as small
>     and fast to load as possible. These classes could benefit from
>     JSR-292's anonymous classes, so each synthetic closure class
>     doesn't load unnecessary metadata.
>
>
> My understanding is that most of the cost comes from the methods, not 
> the class.  In any case, loading is a one-time thing.  SE 7 will 
> improve that with a new format for use instead of jar files.
>
> The 292 EDR doesn't describe anonymous classes.  Do you mean method 
> handles?  It isn't clear that code generated to 292's method handles 
> would actually be faster, but without a proposal on how to do it all 
> we can do is guess.  I strongly encourage you to suggest a form for 
> the specification and implementation that would do that.

I really meant anonymous classes, I just assumed this would be in the 
scope of 292 because the original motivation was support for 
dynamic-typed languages (long time since I've checked the EDR, not 
following 292's list...). I realize that the space & loading costs are 
small; but then, the same holds for the helper classes generated by many 
dynamic langs. Of course the latter tend to produce a much higher number 
of such classes; but then, I (somewhat optimistically) envision a future 
with next-generation frameworks and DSLs abusing closures... if I ever 
have five closures per method and fifty per class, even if that's just 
in niche usages, any savings are significant, even with a better 
packaging format.

>     Lightweight closures are very important for any usage that
>     involves abundant, fine-grained closures. One of my old pet peeves
>     with Java inner classes is that they're so bloated; closures (as
>     powerful as BGGA or CfJ 0.6a+b) will be even more bloated.
>
>
> I'm not sure in what sense you see those specifications as requiring 
> weight in the implementation.  Inner classes are certainly bloated in 
> source, and have some start-up-time impact, but the objects themselves 
> are small and fast to create and invoke.

I didn't see any impediment to the desired optimizations; I was just 
worried that it could exist somewhere I didn't notice. But your feedback 
clears these worries.

> It isn't clear how to use jsr292's method handles to specify and 
> implement a language construct compatible with the strawman, or what 
> the overhead of such a solution would be.  I think such a research 
> project would be a very worthy undertaking, though I'm afraid I can't 
> allocate my own time to the task.  If it is to be done in time for SE 
> 7 (specified, implemented, and integrated by the beginning of June), 
> then whoever wants to make it happen (is that you, Osvaldo?) should 
> probably start immediately.  I will be happy to provide as much 
> feeedback as my time allows.

I didn't took the time to consider MethodHandles, that was not among my 
suggestions. MHIs and closures are both special interfaces, so that's 
likely another item in the wish-list of optimizations that I hope 
somebody, sometime, will do - I'm not able to provide a significant 
contribution for this, certainly not in the current JDK7 schedule.

A+
Osvaldo

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/closures-dev/attachments/20091216/e25d5737/attachment.html 


More information about the closures-dev mailing list