[MLton] Parallel Runtime System
    Matthew Fluet 
    fluet at tti-c.org
       
    Sat Jun 16 11:55:27 PDT 2007
    
    
  
Eric McCorkle wrote:
> As part of my graduate work, I'm now working on a standalone runtime for 
> concurrent functional languages.  My goal is to provide a compact, 
> highly-parallel scheduler and memory manager which can be used as a 
> runtime for languages like Standard ML.  I'm hoping to tie this system 
> into MLton as an alternate runtime (if nothing else, to test other ideas 
> I'm investigating, but I'd be more than happy for others to use it too).
Sounds like a cool project.  One tough problem is making 'portable' 
runtime systems -- in the implementation of a high-level language, the 
compiler and runtime system are usually tightly integrated.
> I'm interested in the following:
> * Anything I should know about how MLton allocates frames (I'm assuming 
> you heap-allocate frames, of which I'm almost 100% certain, but if I'm 
> wrong, let me know!)
MLton heap allocates entire stacks, not individual stack frames.  When a 
computation is about to overflow its stack, a GC is initiated, which 
allocates a new (larger) stack and copies the computation to the new stack.
Jake Donham was working on a parallel GC (although believe that he 
abandoned the project):
   http://mlton.org/pipermail/mlton/2007-January/029500.html
> * Does MLton use safe-points, and if not, what would it take to add them?
Yes, MLton uses safe-points.  Every function that enters the runtime (in 
particular, calls to GC_collect) ensures that all live ML variables are 
allocated on the ML stack.
> * How exactly do I start an MLton program (at the low level), what 
> scheduler hooks do I need to provide, and what garbage 
> collection/allocation hooks do I need?
See  include/{c-,x86-,}main.h  in the sources.  That corresponds to the 
initial main function.
As to what you need to provide, pretty much everything from  runtime/gc
   in the sources is what the compiler expects from the garbage 
collector.  Obviously, GC_collect is the 'big' function that programs 
call, but there are a lot of other dependencies on the layout of data, 
location of the heap frontier pointer, etc.
    
    
More information about the MLton
mailing list