Simon Peyton Jones via ghc-devs <ghc-devs@haskell.org> writes:

> |  Now that is very interesting, and certainly not something I would have
> |  expected! Why would asynchronous exceptions need to capture any portion of
> |  the stack? Exceptions obviously trigger stack unwinding, so I assumed the
> |  “abort to the current prompt” part of my implementation would already
> |  exist, but not the “capture a slice of the stack” part. Could you say a
> |  little more about this, or point me to some relevant code?
>
> Suppose a thread happens to be evaluating a pure thunk for (factorial 200). 
> Then it gets an asynchronous exception from another thread.  That asynch exn 
> is nothing to do with (factorial 200). So we could either 
>
> A. revert the thunk to (factorial 200), abandoning all
>    the work done so far, or
> B. capture the stack and attach it to the thunk, so that ie any other
>    thread enters that thunk, it'll just run that stack.
>
> Now (A) means that every thunk has to be revertible, which means keeping its 
> original free variables, which leads to space leaks.  And extra work to avoid 
> losing any info you need for reversion.  Extra work is painful; we want to 
> put all of the extra work on the asynch exn.
>
> So we do (B).
>
> See Section 8 of "Asynchronous exceptions in Haskell".
> https://www.microsoft.com/en-us/research/publication/asynchronous-exceptions-haskell-3/
>
> And "An implementation of resumable black holes" (Reid).
> https://alastairreid.github.io/papers/IFL_98/
>
> This stack-freezing stuff is definitely implemented. I'm not quite
> sure where, but I'm cc'ing Simon Marlow who can point you at it.
>
For the record, runtime system captures the stack state in an AP_STACK
closure. This is done in rts/RaiseAsync.c:raiseAsync and some of this is
described in the comment attached to that function.

As Simon PJ points out, this is all very tricky stuff, especially in a
concurrent context. If you make any changes in this area do be sure to
keep in mind the considerations described in Note [AP_STACKs must be
eagerly blackholed], which arose out of the very-nast #13615.

Cheers and good luck!

- Ben

Attachment: signature.asc
Description: PGP signature

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to