Extermal references: Closures for the Java Programming Language (v0.5) issues list
Neal Gafter
neal at gafter.com
Fri Feb 26 21:37:15 PST 2010
Alex Buckley asked me to include BGGA and other documents in messages on
this list, so that they may formally be considered contributions to project
lambda.
Enclosed please find the issues list associated with the BGGA
specification. It may also be found at <
http://www.javac.info/issues-v05.html>.
Closures: Open Issues (v0.5)
- Make it easy to yield a result early from a closure. It should be as
easy to yield a result early from a closure as returning from a method.**
- Should support for currying be directly in the language? Bound method
references?
- *Handle interfaces like Comparator that define more than one method*,
all but one of which will be implemented by a method inherited from
Object.
The definition of "interface with a single method" should count only
methods that would not be implemented by a method in Object and should
count multiple methods as one if implementing one of them would implement
them all. Mainly, this requires a more precise specification of what it
means for an interface to have only a single abstract method.
- *Specify mapping from function types to interfaces*: names, parameters,
etc.
We should fully specify the mapping from function types to
system-generated interfaces precisely.
- *Type inference*. The rules for type inference need to be augmented to
accomodate the inference of exception type parameters. Similarly, the
subtype relationships used by the closure conversion should be reflected as
well.
- *VM support for null*
The verifier already supports null, including in the verifiers, but there
is no way to specify null as a method argument or return type. We need a way
to specify null in a signature (that is, a new signature letter).
- *Elided exception type parameters* to help retrofit exception
transparency.
Perhaps make elided exception type parameters mean the bound. This
enables retrofitting existing generic interfaces that don't have a type
parameter for the exception, such as java.util.concurrent.Callable, by
adding a new generic exception parameter.
- *Document the new unchecked Throwables for nonlocal transfers*.
- *Should javac detect the most common problematic interactions catching
nonlocal transfers?
*The most likely case may be completely local within a single method,
when a nonlocal transfer has a try-catch between the transfer and its
target.
- *volatile on locals*.
We should say it is allowed.
- *How are class literals for function types formed?*
Is it {?=>?}.class ?
- *The system class loader should dynamically generate function type
interfaces.
*The interfaces corresponding to function types should be generated on
demand by the bootstrap class loader, so they can be shared among all user
code. For the prototype, we may have javac generate these interfaces so
prototype-generated code can run on stock (JDK5-6) VMs.
- *Can or should javac inline some invocations of control abstraction
APIs?
*If so, how will it decide which ones? Does the inlining happen at the
bytecode or source level? Will javac handle break/return/continue
efficiently when these are inlined? Or is this something should be left for
the VM to handle? (Hotspot already seems to handle the most important cases)
- *Do we need any new reflection support for closures?
*For function types? For null? Probably not because of the information
available in the defining (not bridge) methods.
- *Should a labelled for control invocation statement* interact with
labelled break and continue?
- *Should for be a modifier* (before the return type in a method
declaration) or appear next to the name?
- *Would explicit VM support for nonlocal transfers improve performance?*
- *Should we request VM support for proper tail recursion?*
- Should we support (parametric) polymorphic function types? Probably
not.
------------------------------
[image: Creative Commons
License]<http://creativecommons.org/licenses/by-sa/3.0/us/>
Closures for Java by Gilad Bracha, Neal Gafter, James Gosling, Peter von der
Ahé <http://www.javac.info/> is licensed under a Creative Commons
Attribution-Share Alike 3.0 United States
License<http://creativecommons.org/licenses/by-sa/3.0/us/>.
More information about the lambda-dev
mailing list