call operator and orthogonality with existing VM internals

Serge Boulay serge.boulay at gmail.com
Mon Mar 8 11:51:44 PST 2010


 I do like the idea of the lambda keyword

Function<Integer, Integer> square = lambda(int x) { return x*x ; }

and this would clearly distinguish it from the proposed method literals that
use #.



On Mon, Mar 8, 2010 at 12:22 PM, Jakob Praher <jp at hapra.at> wrote:

> Dear List,
>
> I was thinking much about the syntax of the upcoming language changes
> regarding the introduction of
> * first class functions
> * first class function types
> * lambda expressions ("closures")
>
> While IMHO the best would be to refactor certain aspects of the language
> (e.g. blur the distinction between Statements and Expressions,
> especially treat "blocks" as expressions, change the call expressions to
> allow custom control flow constructs, ...).
>
> Since I am realistic in that such changes will not be doable for version
> 7, I think one should seek orthogonality and consistency in integrating
> these new constructs.
>
> I would suggest the following:
> * Add a call operator (e.g. a special purpose "call" method) that can be
> short-cutted to x() instead of x.call(...)
> * Treat a function as an instance of java.lang.Function<ReturnType,
> ArgT1, ..ArgTn> that implements this call operator
> * Add a special keyword "lambda" for creating an instance of a Function
> from a Block (this is in the tradition of "synchronized" and friends):
>     Function<Integer, Integer> square = lambda(int x) { return x*x ; }
>
> * Introduce a bind method that converts a method to its lamba form
> (currying the this away):
>     class MyClass {  String echo(String x ) { return x; } }
>     Method echoMethod = myinstance.getClass().getMethod("test");
>     Function<String,String> echo = echoMethod.bind(this);
>     System.out.println( echo("Hello") );
>     System.out.println( echo.call("Hello") );
>
> Some Reasons:
> * Is IMHO more consitent with current Java
> * Reflection concepts like Class, Method, ... are "magic VM" instances too
> * AtomicInteger.compareAndSet can be internally optimized to single CAS
> instruction too
>
> What do you think about this?
>
> -- Jakob
>
>
>
>
>
>
>


More information about the lambda-dev mailing list