[MLton] Ongoing parallel runtime work

Matthew Fluet fluet at tti-c.org
Tue Jan 22 08:55:30 PST 2008


On Sat, 19 Jan 2008, Eric McCorkle wrote:
> I've been working steadily on my efforts to implement the parallel runtime 
> system I described in earlier discussions.  The scheduler is at a point where 
> I'm comfortable adding it to subversion.  I'll have to come back and do some 
> work to implement the CML synchronization primitives, but the scheduler 
> itself, as far as I can tell, is solid (I have a randomized test program I 
> can send with it).  I already have subversion write access, but need a bit of 
> direction on what subdirectories, etc my code should go under.

The appropriate place for work-in-progress would be a subversion branch. 
Our convention has been to make branches with the name 
"on-YYYYMMDD-NAME-branch".  For subversion, you would do something like:

   svn cp -m "Making NAME branch" svn+ssh://mlton.org/svnroot/mlton/trunk svn+ssh://mlton.org/svnroot/mlton/branches/on-YYYYMMDD-NAME-branch
   svn co svn+ssh://mlton.org/svnroot/mlton/branches/on-YYYYMMDD-NAME-branch mlton.NAME-branch
   cd mlton.NAME-branch
   (* apply changes *)
   svn commit

Please do not just
   svn mkdir svn+ssh://mlton.org/svnroot/mlton/branches/on-YYYYMMDD-NAME-branch
and 'svn add'.  That completely foils seeing the difference between the 
mlton trunk and your project.  Indeed, it would be ideal that there are 
multiple commits showing the development of your project from the mlton 
trunk to its current state, rather than one massive commit that brings 
over all of your project.

It would also be very good to add a
   <src>/doc/NAME-notes
directory and a README file that accumulates some details on the project, 
how it differs from the mlton trunk, etc.

> In particular, I've done the following:

These sound like fairly extensive changes to both the runtime and the 
compiler proper.  Is all of this implemented and working, or just 
work-in-progress changes?

> In the beginning, I was planning not to do generational collection at this 
> time, but I've built things to make it easy to add.  I'm reconsidering this, 
> as supporting generational collection would make some aspects of calculating 
> the root set alot easier (the global pointers and the currently-existing 
> threads can be treated as externally-stored objects and described using type 
> signatures).  However, the price is that *all* pointers must be represented 
> with double-pointers, not just global pointers.  Does anyone have practical 
> experience/observations which can inform this decision?

Sorry, I don't have much experience to share.  But, it seems like making 
everything double-pointers would use a lot of space.  (Though, for 
parallelism, perhaps trading that space for time is a good tradeoff.)




More information about the MLton mailing list