river-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bryan Thompson <br...@systap.com>
Subject Re: Investigating dynamic Lambda's for services
Date Wed, 28 May 2014 12:33:06 GMT
How stable is the lamba translation?  If this changes or is different for
different JVMs, will that break things?
Bryan


On Wed, May 28, 2014 at 8:29 AM, Peter <jini@zeus.net.au> wrote:

> So far, a subset of Lambda's appear very suitable for marshalling
> remotely, where their code can execute in a remote jvm.
>
> A lambda, that doesn't refer to object methods in its enclosing class,
> results in the java compiller creating a static method that accepts
> captured object arguments, containing the lambda's block code.
>
> With ASM, I can very easily read a class and strip out all but this static
> method.  A non instantiable class file with no class init.
>
> This class can be given a temporary known name, unrelated to the original
> client code (not intended for class loading, but identity).
>
> A named identity of this class can then be created using a message digest
> of the class bytes.
>
> The class byte code can be packaged and serialized remotely.
>
> Upon deserialization, the class can be rewritten again (if not loaded
> previously) and named after its message digest, and given a new object
> method to implement the functional interface, final fields added to hold
> serialized captured arguments, and a constructor that accepts the captured
> arguments.
>
> It is now a simple basic object that calls a static method with arguments.
>
> The class file would be verified, then loaded into a ClassLoader with no
> permissions.
>
> The class would be cached in a Map with weak values, the key being the
> message digest, so idential deserialized lambda's wouldn't need to rewrite
> and load their class bytecode.
>
> These lambda's could be used in services to allow remote internal
> iteration, over large data collections, like distributed hash tables, to
> process and return results.
>
> An argument captured by a lambda, could itself be a remote service, used
> as a callback.  Lambda's could be stored by services, and used like queries
> to notify remote listeners of changes in service state.
>
> A bit like an Event notification version of Map Reduce.
>
> It seems reasonable that distributed lambda's should provide a subset of
> Java lambda expressions based on static compilled methods and that all
> object arguments that lambda's capture should be or implement public api or
> service api.
>
> Thoughts?
>
> Peter.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message