How do you detect when a process runs out of stack? Do you calculate
the max stack usage from the bytecode and check before you push a new
stack frame?
That's pretty much exactly right.
The maximum stack usage for each function is statically calculated by
the compiler anyway, see FunObj at:
http://haskell.org/haskellwiki/Yhc/RTS/hbc
The runtime doesn't quite check every time it pushes a new stack frame
(it pushes stack frames for lots of reasons, for example because it's
about to GC) so it always ensures that all times it has enough stack
space for one stack frame (they're not very big anyway).
When the runtime performs an EVAL function it checks that there is
enough stack space for two frames and the called function's maximum
stack usage (one for the frame it's going to create and another as the
"spare").
How do you deal with OS threads portably? I assume you use pthreads
for *nix. Does windows know pthreads or did you create some thin
wrapper over OS specific threading?
A wrapper over OS specific threading, the *nix implementation does
indeed use pthreads, and Neil's going to write the windows one since I
know nothing about it ;-)
Cheers :-)
Tom
_______________________________________________
Yhc mailing list
[email protected]
http://haskell.org/mailman/listinfo/yhc