[Haskell-cafe] Re: Python's big challenges,
Haskell's big advantages?
Brandon S. Allbery KF8NH
allbery at ece.cmu.edu
Fri Sep 19 17:53:48 EDT 2008
On 2008 Sep 19, at 17:14, Manlio Perillo wrote:
> Brandon S. Allbery KF8NH ha scritto:
>> There are two ways to handle a growable stack; both start with
>> allocating each stack in a separate part of the address space with
>> room to grow it downward. The simpler way uses stack probes on
>> function entry to detect impending stack overflow. The harder (and
>> less portable) one involves trapping page faults ("segmentation
>> violation" on POSIX), enlarging the stack, and restarting the
>> instruction that caused the trap; this requires fairly detailed
>> knowledge of the CPU and the way signals or page faults are handled
>> by the OS. (There's also a hybrid which many POSIXish systems use,
>> trapping the page fault specifically when running the stack probe;
>> the probe is designed to be safe to either restart or ignore, so it
>> can be handled more portably.)
>
> What implementation is used in GHC?
I haven't looked at the GHC implementation.
> Is this more easy to implement with a pure functional language like
> Haskell, or the same implementation can be used with a procedural
> language like C?
You can use it with pretty much any language, as long as you can limit
the size of stack frames. (If a stack frame is larger than the stack
probe distance you might just get an unhandled page fault.) The main
question is whether you ant to absorb the additional complexity; it's
a bit harder to debug memory issues when you have to deal with page
faults yourself. (A *real* segmentation violation might be hidden by
the stack grow code.)
--
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery at kf8nh.com
system administrator [openafs,heimdal,too many hats] allbery at ece.cmu.edu
electrical and computer engineering, carnegie mellon university KF8NH
More information about the Haskell-Cafe
mailing list