Can strict ST break referential transparency?

Ben Gamari ben at smart-cactus.org
Thu Nov 23 15:20:07 UTC 2017


Yuras Shumovich <shumovichy at gmail.com> writes:

> Hello,
>
Hello,

Sorry for the late reply; this required a bit of reflection. The
invariants surrounding the suspension of ST computations is a rather
delicate and poorly documented area.

I believe the asynchronous exception case which you point out is
precisely #13615. The solution there was, as David suggests, ensure that
no resulting thunk could be entered more than once by a very strict
blackholing protocol. Note that this isn't normal "eager" blackholing
protocol, which still might allow multiple entrancy. It's rather a more
strict variant, requiring two atomic operations.

I can't be certain that there aren't more cases like this, but I suspect
not since most asynchronous suspensions where the resulting thunk might
"leak" back into the program go through the raiseAsync codepath that was
fixed in #13615.

Cheers,

- ben

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20171123/5e02d7f7/attachment.sig>


More information about the ghc-devs mailing list