[MLton] interrupted system call

Stephen Weeks MLton@mlton.org
Sat, 27 Mar 2004 09:51:32 -0800

> The restart loop is a lot of overhead to keep around for control
> flow paths that can never be reached.  The {restart:bool} argument
> to syscall asserts that a particular system call will never need to
> be restarted.  It should be the case that every syscall call passes
> either true or false (the constants).

Ah.  That makes sense.

> I think we've uncovered enough corner cases in system calls to warrant
> having one workhorse function with all the logic and special instances for
> the most common cases.


> I don't agree with your abstraction.  I proposed:
>     signature M =
>        sig
>           val m : (('a -> 'b) * ('b -> 'c)) -> ('a -> 'c)
>        end
>     signature S =
>        sig
>           val s : ('a -> 'b * (unit -> 'c)) -> ('a -> 'c)
>        end

You're right.  That'll teach me to try to just convert the arguments.
Your code also explains why I was confused about the "manual closure
conversion".  It isn't necessary, one can simply return the closure
from pre and have post invoke it.

> Simply because I believe they correspond to distinct phases in the
> execution of a system call.  You're right that nothing interesting happens
> at the boundaries; the execution goes right from pre to call, and from
> call right to return or post.

OK.  It feels weird to me, but I understand what's going on, and it's
only syntax.