[MLton] Non-exhaustive exn fn match

Vesa Karvonen vesa.karvonen@cs.helsinki.fi
Tue, 19 Jul 2005 04:33:53 +0300


Quoting Stephen Weeks <sweeks@sweeks.com>:
> > True, but then you have to depend on threads and pay (possibly significantly)
> > for the critical section. 
> 
> You only have to depend on threads if you want threads.  If you
> don't use threads, you don't need the critical section.

Perhaps I wasn't clear enough. What I was thinking about is that the
implementation of the UT would either A) use some critical section procedure
(like MLton.Thread.atomically), which can reduce portability, or B) not use a
critical section, which means that the code wouldn't be thread safe. Either
way one has some interesting times ahead (portability problems / nasty bug).

>  I think we in
> fact even used to have an optimization in MLton to turn
> atomic{Begin,End} into no-ops for programs without threads.  Sadly, I
> think that optimization went by the wayside.  So, I guess you're
> right, you do have to pay some.  But the cost is only a couple of
> instructions.

I wasn't really referring to any particular thread implementation. The
cost would increase significantly if the thread implementation supports
true parallelism and you actually have multiple processors.

> > It is much better to just avoid unnecessary shared state, IMHO.
> 
> Maybe.  I don't know whether the ref-cell approach (even with critical
> sections) or exn-based approach will be more efficient with MLton.
> Some tests would say.

I would expect that the performance of an exception based solution would
always be good enough. A ref-cell based solution with a critical section
could totally kill performance in a worst case scenario.

Overall, I would expect to spend much more time maintaining a solution
based on ref cells.

(Off to the train then...)

-Vesa Karvonen