The lambda conversion and a lambda body that doesn't complete.

Ben Evans benjamin.john.evans at
Wed Mar 2 09:09:58 PST 2011

OK, I'll bite.

What's the interest in this use case?

As I read it, you're saying that if the compiler can provably guarantee that
a lambda cannot return normally, then the compiler should ignore the return
type when SAM-converting. Is that the property we're after?

What's the use case for this feature? How often are we actually going to
write code inside a lambda which the compiler can guarantee will not return
normally? Should we even be encouraging people to write code like that?

Glaringly obvious use cases and other smackdown in 3-2-1.... :)


On Tue, Mar 1, 2011 at 5:35 PM, Neal Gafter <neal at> wrote:

> Dear Lambdans-
> Given
> *interface F {
>    int invoke();
> }*
> I would like to be able to write
> *F x = #{ throw new Exception(); };
> *
> (Modulo syntax - whatever the current syntax is)
> But according to the current draft specification that's not allowed (the
> lambda as written can only be converted to a SAM with a void return type).
> I think that whether or not the lambda's body can complete normally should
> be taken into account in the lambda conversion to make this legal.  As a
> point of information, the behavior I prefer is the behavior of Scala, BGGA,
> and C# (among others).  This is also consistent with the way method
> implementations work:
> *int f() { throw new Exception(); }*
> In the unfortunate case that you need use cases for this, draft
> specification language, or suggestions for a straightforward
> implementation,
> I can provide those.
> Cheers,
> Neal

More information about the lambda-dev mailing list