It still seems to me that too much "fuss" is being made/proposed over binding or not 
binding the main Haskell thread to the main OS thread.  I remain to be convinced that 
anything more complicated than "The main Haskell thread is bound to the main OS
thread.  Period." is justified.

Simon Peyton-Jones wrote:

> The principal downside is that naïve users might end up with
> unexpected thread switching for simple concurrent programs.

and Wolfgang Thaller replied:

> Yes. (However, for "simple concurrent programs" that cost should be negligible.)

Is it a real concern that a naive user will get significant unexpected overhead?

Besides, the example being discussed above,

| main = forkIO doLongComputation >> doAnotherLongComputation

is unrealistic.  Without coordination between the two long computations, if the main 
thread finishes its `doAnotherLongComputation` before the auxiliary thread finishes 
its `doLongComputation`, the latter will be summarily abandoned.


Simon Peyton-Jones wrote:

> So, we could arrange that runMain did the forkIO wrapping above, unless a command 
> line flag said "no, make the main thread bound" in which case we can inject a call 
> to runMain' instead, which refrains from doing a forkIO.

I think it's best to have the runtime system do as little implicit stuff as possible.  
In particular, it's unattractive for it to fork a Haskell thread (conditionally, no 
less).

> So the proposal boils down to:
>         - yes, at the impl level the main thread is bound, as you suggest
>         - but at the user level, the programmer can control whether or not
>                 his 'main' is bound
>         - default is not-bound

If boundedness is not unconditional (as I prefer), I would suggest "bound" as the 
better default (favoring function over performance).

Dean

_______________________________________________
FFI mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/ffi

Reply via email to