call operator and orthogonality with existing VM internals
Jakob Praher
jp at hapra.at
Mon Mar 8 09:25:09 PST 2010
This line
Function<String,String> echo = echoMethod.bind(this);
should actually be
Function<String,String> echo = echoMethod.bind(myinstance);
Jakob Praher schrieb:
> 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