[MLton] Serialization?

Matthew Fluet fluet@cs.cornell.edu
Tue, 5 Jul 2005 09:46:44 -0400 (EDT)

> Assuming Matthew ever makes the bytecode portable ;), 

Stephen actually put most of the work into the bytecode codegen.  I've 
only been fixing things as other changes of mine break it.

> Even if the user is required to serialize things by hand, he would still
> need to be able to ship functions across. Matthew's bytecode seems the best
> way to acheive this, but I don't know how feasible it is to run bytecode
> within an existing MLton application. 

There really isn't any support for throwing some bytecodes over the wire 
to another MLton application and start executing the bytecode in the 
receiver application.  As with many things, the whole-program nature of a 
MLton application means that almost nothing makes sense out of the context 
of its whole-program.

The better way (at least in MLton) of implementing something like the 
above is to write the client and server together as one application, 
thereby sharing the same code and representation.  You would invoke the 
server as  'app -server'  and the client as  'app -client'  (the latter 
possibly followed by a MLton.World.save which would potentially throw away 
as much of the heap data that won't be accessible by the client).  
Unfortunately, you essentially need to write a dispatch loop for the 
client, taking requests for functions to call.

> That said, how can I help make the bytecode portable?

Right now, the bytecode isn't at all portable.  Like every other codegen, 
it compiles a target-dependent program.  One way of making it more 
portably would be to make "bytecode" a target, rather than just a codegen.  
The current difficulty with making the bytecode portable is that we 
compile all the C-function calls of the program into a dispatch handled 
by the bytecode interpreter.  I could imagine a less integrated approach.  
Alternatively, one could simply limit the FFI supported by the bytecode to 
the FFI needed to implement the Basis Library.  We could easily ensure 
that each bytecode interpreter on different platforms correctly handled 
those C-functions, at the expense of excluding additional C-functions in 
the user program.

> Also, what level of interaction is inteded between a MLton-built application
> and bytecode that is run inside it?

See above.

> ... for me, I just need to be able to call the 'main' function of the
> bytecode with a parameter and recover the result. 

This seems more like remote program execution than mobile code; which 
means that OS level solutions might work just as well.