[Yhc] some initial questions

Tom Shackell shackell at cs.york.ac.uk
Fri Mar 3 11:11:26 EST 2006


> 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


More information about the Yhc mailing list