[MLton] CML

Henry Cejtin henry@sourcelight.com
Mon, 3 May 2004 16:26:10 -0500

One  thing  I  never  understood  about  CML:  why is it that a single object
represents a bi-directional channel instead of having  a  separate  read  and
write  channel.   The advantage of the latter is that it makes it much easier
(and obvious) for the GC to eliminate threads that can have no effect.  As an
example,  if  the  write  end  of  a  channel  is lost (GC'd) then any thread
blocking on a read from the channel is garbage.  Because of  the  synchronous
aspect of channels, the same is true of the reverse situation.

There  are  clearly times when you need a bi-directional connection, but that
can trivially be done by creating two channels and packaging the write end of
one and the read end of the other one.

I  assume  that unless you are lucky, with the CML method, I will get threads
blocked for ever and never collected quite frequently, right?

One other question:  with  the  current  implementation,  just  how  fast  is
something  like  ping-pong  (I.e.,  two threads just sending unit messages to
each other as fast as they can until some count is reached)?