Updated State of the Lambda

Rémi Forax forax at univ-mlv.fr
Fri Dec 9 12:57:57 PST 2011


On 12/09/2011 09:32 PM, Brian Goetz wrote:
> Yes, this is well-covered ground.  What you're asking for is "function
> types" (or arrow types, or algebraic function types, or structural
> functions types.)  The short answer is "no".
>
> Function types are the "obvious right way" to represent the type of a
> lambda, until you realize that they will end up getting implemented
> using generics, which means they will be erased.  Erased function types
> are the worst of both worlds.

Technically, you don't have to implement function types using generics,
anyway you will have to support generics because
users will want to write (T -> boolean) so you will have
to support generics erasure in function types.
Hence as Brian said you will end up with having the worst
of both world.

If generics are reified in the future, function types may be re-considered.

>
> Instead, we use functional interfaces in APIs, and then users can use
> named classes, anonymous classes, or lambdas to create instances of the
> functional interfaces.

cheers,
Rémi

>
>
> On 12/9/2011 1:44 PM, Yuval Shavit wrote:
>> By the way -- and I apologize if this has already been covered, I did
>> some searching and nothing came up -- is there any thought as to whether
>> methods will ever be able to declare lambdas as arguments?  Something like:
>>
>>      public<T>  void myFilter(Iterable<? extends T>, (? super T ->
>>      boolean) predicate ) { ... }
>>
>>
>> This function could then take either a lambda of the same type, or any
>> reference typed as a functional interface which could be expressed as a
>> corresponding lambda.
>>
>> Thanks,
>> Yuval
>>
>> On Fri, Dec 9, 2011 at 1:28 PM, Brian Goetz<brian.goetz at oracle.com
>> <mailto:brian.goetz at oracle.com>>  wrote:
>>
>>      An updated State of the Lambda is available here:
>>
>>      http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html
>>
>>
>>



More information about the lambda-dev mailing list