<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><div>If there is indeed a problem, I suspect the right way to fix it is to make sure that no partially evaluated thunk is ever resumed twice. Inter-thread exceptions are presumably rare enough that we don't have to worry *too* much about their cost.</div><div><br></div><div><br></div><div><br></div><div id="composer_signature"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><div style="font-size:85%;color:#575757">David Feuer</div><div style="font-size:85%;color:#575757">Well-Typed, LLP</div></div><div><br></div><div style="font-size:100%;color:#000000"><!-- originalMessage --><div>-------- Original message --------</div><div>From: Yuras Shumovich <shumovichy@gmail.com> </div><div>Date: 11/21/17  12:43 PM  (GMT-05:00) </div><div>To: ghc-devs <ghc-devs@haskell.org> </div><div>Subject: Can strict ST break referential transparency? </div><div><br></div></div><br>Hello,<br><br>I was evaluating a possibility that linear types can break referential<br>transparency [1], exactly like lazy ST [2].<br><br>But on the way I realized that even strict ST may suffer from the same<br>issue. If ST computation is interrupted by e.g. async exception,<br>runtime will "freeze" it at the point where it was interrupted [3].<br><br>So the question: is the "freezed" computation just a normal thunk? Note<br>that the runtime doesn't guarantee that a thunk will be evaluated only<br>once [4]. If the "freezed" thunk captures e.g. STRef, and will be<br>evaluated twice, its effect could become observable from outside, just<br>like in case of lazy ST.<br><br>I tried to check the theory by stress testing RTS. Unfortunately I<br>immediately discovered a runtime crash [5], which is probably not<br>related to my question.<br><br>Hope someone will be able to clarify things for me.<br><br>Thanks,<br>Yuras.<br><br>[1] https://github.com/ghc-proposals/ghc-proposals/pull/91#issuecomment<br>-345553071<br>[2] https://ghc.haskell.org/trac/ghc/ticket/14497<br>[3] See section 8 there: https://www.microsoft.com/en-us/research/wp-co<br>ntent/uploads/2016/07/asynch-exns.pdf<br>[4] https://www.microsoft.com/en-us/research/wp-content/uploads/2005/09<br>/2005-haskell.pdf<br>[5] https://ghc.haskell.org/trac/ghc/ticket/14497<br>_______________________________________________<br>ghc-devs mailing list<br>ghc-devs@haskell.org<br>http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs<br></body></html>