Alternative syntax for closures

Neal Gafter neal at gafter.com
Wed Jul 16 17:16:48 PDT 2008


On Wed, Jul 16, 2008 at 4:44 PM, Rémi Forax <forax at univ-mlv.fr> wrote:

> Neal Gafter a écrit :
>
>> I fundamentally disagree with designing a language based on an ambiguous
>> syntax.
>>
> expr + expr + expr is ambiguous but it doesn't seem to be a big problem.


Actually, it isn't. The Java grammar supports only a single parse of this.


>
> <throws E> void fork(
>  final {==>void throws E} block) throws E {
> executor.submit(new Runnable() {
>  public void run() {
>    block.invoke(); // need a try/catch E here
>  }
> });
> }
>
> Are you agree that this example raise an exception
> is break/continue or return are used in the closure block ?


No; this implementation of "fork" won't even compile (E is thrown but not
caught or declared in run()).


> My point is that only unrestricted closure needs exception transparency,
> that why there is a special syntax for defining method that takes
> an unrestricted closure as parameter.


I disagree.  Exception transparency is also useful outside control APIs, and
even in control APIs there are cases where one needs to store the closure in
a variable.  Doing so in a typesafe manner is better than requiring a cast.
For a simple example, try writing an API that can be used this way:

new StringSwitch()
  .Case("xyzzy", { ==> System.out.println("found xyzzy"); })
  .Case("plugh", { ==> System.out.println("found plugh"); })
  .Case("foo", { ==> System.out.println("found foo"); })
  .Dispatch("foo");

Your implementation should support exception transparency and control
transparency.  I believe you'll find that you need to store closures that
have parametric exception types.

See also
http://gafter.blogspot.com/2006/10/concurrent-loops-using-java-closures.html.
 I expect to provide an implementation of the eachConcurrently API
with
one of the upcoming BGGA prototypes.  I don't think this is possible with
your formulation.

A number of people who are most concerned about supporting control APIs in
BGGA nevertheless advocate adding support for exception transparency.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/closures-dev/attachments/20080716/89f061a3/attachment.html 


More information about the closures-dev mailing list