* bug#20938: make-dynamic-state, with-dynamic-state & exceptions @ 2015-06-30 13:50 Josep Portella Florit 2015-07-01 6:49 ` bug#20938: Improved workaround Josep Portella Florit ` (3 more replies) 0 siblings, 4 replies; 11+ messages in thread From: Josep Portella Florit @ 2015-06-30 13:50 UTC (permalink / raw) To: 20938 This code crashes Guile 2.0.11: (define x (make-dynamic-state)) (with-dynamic-state x (lambda () (/ 1 0))) For now I'm using this workaround: (let ((w-d-s with-dynamic-state)) (set! with-dynamic-state (lambda (s p) (let ((e #f)) (w-d-s s (lambda () (catch #t p (lambda x (set! e x))))) (when e (apply throw e)))))) ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#20938: Improved workaround 2015-06-30 13:50 bug#20938: make-dynamic-state, with-dynamic-state & exceptions Josep Portella Florit @ 2015-07-01 6:49 ` Josep Portella Florit 2016-03-13 14:57 ` bug#20938: More information Josep Portella Florit ` (2 subsequent siblings) 3 siblings, 0 replies; 11+ messages in thread From: Josep Portella Florit @ 2015-07-01 6:49 UTC (permalink / raw) To: 20938 The workaround in my other message discards the return value of `with-dynamic-state'. I've improved it: (let ((w-d-s with-dynamic-state)) (set! with-dynamic-state (lambda (s p) (let* ((e #f) (r (w-d-s s (lambda () (catch #t p (lambda x (set! e x))))))) (if e (apply throw e) r))))) ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#20938: More information 2015-06-30 13:50 bug#20938: make-dynamic-state, with-dynamic-state & exceptions Josep Portella Florit 2015-07-01 6:49 ` bug#20938: Improved workaround Josep Portella Florit @ 2016-03-13 14:57 ` Josep Portella Florit 2016-06-24 7:11 ` bug#20938: make-dynamic-state, with-dynamic-state & exceptions Andy Wingo 2017-02-28 14:17 ` Andy Wingo 3 siblings, 0 replies; 11+ messages in thread From: Josep Portella Florit @ 2016-03-13 14:57 UTC (permalink / raw) To: 20938 It doesn't crash Guile 1.8.8, but it does crash Guile 2.1.2, and this version outputs the following message about 2150 times: "Warning: Unwind-only `stack-overflow' exception; skipping pre-unwind handler." ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#20938: make-dynamic-state, with-dynamic-state & exceptions 2015-06-30 13:50 bug#20938: make-dynamic-state, with-dynamic-state & exceptions Josep Portella Florit 2015-07-01 6:49 ` bug#20938: Improved workaround Josep Portella Florit 2016-03-13 14:57 ` bug#20938: More information Josep Portella Florit @ 2016-06-24 7:11 ` Andy Wingo 2016-06-24 14:58 ` Josep Portella Florit 2017-02-28 14:17 ` Andy Wingo 3 siblings, 1 reply; 11+ messages in thread From: Andy Wingo @ 2016-06-24 7:11 UTC (permalink / raw) To: Josep Portella Florit; +Cc: 20938 On Tue 30 Jun 2015 15:50, Josep Portella Florit <jpf@primfilat.com> writes: > This code crashes Guile 2.0.11: > > (define x (make-dynamic-state)) > (with-dynamic-state x (lambda () (/ 1 0))) Related: http://thread.gmane.org/gmane.lisp.guile.devel/16953 How are you using dynamic states? Andy ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#20938: make-dynamic-state, with-dynamic-state & exceptions 2016-06-24 7:11 ` bug#20938: make-dynamic-state, with-dynamic-state & exceptions Andy Wingo @ 2016-06-24 14:58 ` Josep Portella Florit 0 siblings, 0 replies; 11+ messages in thread From: Josep Portella Florit @ 2016-06-24 14:58 UTC (permalink / raw) To: Andy Wingo; +Cc: 20938 El 24/06/16 a les 09:11, Andy Wingo ha escrit: > On Tue 30 Jun 2015 15:50, Josep Portella Florit <jpf@primfilat.com> writes: > >> This code crashes Guile 2.0.11: >> >> (define x (make-dynamic-state)) >> (with-dynamic-state x (lambda () (/ 1 0))) > > Related: http://thread.gmane.org/gmane.lisp.guile.devel/16953 > > How are you using dynamic states? I have code[1] written in Racket which uses what I think are the equivalent to Guile's dynamic states: parameterizations. My code raises exceptions that contain the result of `(current-parameterization)`[2]. It later handles those exceptions and passes the parameterization to `call-with-parameterization`[3] in order to access the value several parameters had before the exception was raised. It also accumulates different results of `(current-parameterization)`, reorders them and for each one it passes the parameterization to `call-with-parameterization` and calls other code[4]. 1: <http://josep-portella.com/en/software/pinaret/> <http://josep-portella.com/software/pinaret/pinaret-0.9.zip> 2: File `pinaret/runtime.rkt`, procedure `raise-error/params`. 3: File `pinaret/system.rkt`, procedure `generate`. File `pinaret/runtime.rkt`, procedure `print-error/params`. 4: File `pinaret/base.rkt`, there are many examples here, look for `(current-parameterization)`. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#20938: make-dynamic-state, with-dynamic-state & exceptions 2015-06-30 13:50 bug#20938: make-dynamic-state, with-dynamic-state & exceptions Josep Portella Florit ` (2 preceding siblings ...) 2016-06-24 7:11 ` bug#20938: make-dynamic-state, with-dynamic-state & exceptions Andy Wingo @ 2017-02-28 14:17 ` Andy Wingo [not found] ` <1b66634b-9e69-da86-116a-088eafb383e7@primfilat.com> 3 siblings, 1 reply; 11+ messages in thread From: Andy Wingo @ 2017-02-28 14:17 UTC (permalink / raw) To: Josep Portella Florit; +Cc: 20938-done On Tue 30 Jun 2015 15:50, Josep Portella Florit <jpf@primfilat.com> writes: > This code crashes Guile 2.0.11: > > (define x (make-dynamic-state)) > (with-dynamic-state x (lambda () (/ 1 0))) Sad :/ Fixed in 2.2 though, finally. I don't really know how to fix it in 2.0 though. Marking as closed given that we will have a shiny new 2.2.0 soon. Andy ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <1b66634b-9e69-da86-116a-088eafb383e7@primfilat.com>]
* bug#20938: make-dynamic-state, with-dynamic-state & exceptions [not found] ` <1b66634b-9e69-da86-116a-088eafb383e7@primfilat.com> @ 2017-03-01 17:30 ` Andy Wingo 2017-03-03 22:15 ` Josep Portella Florit 0 siblings, 1 reply; 11+ messages in thread From: Andy Wingo @ 2017-03-01 17:30 UTC (permalink / raw) To: Josep Portella Florit; +Cc: 20938 On Wed 01 Mar 2017 16:11, Josep Portella Florit <jpf@primfilat.com> writes: > Hi Andy, > > On 02/28/2017 03:17 PM, Andy Wingo wrote: >> On Tue 30 Jun 2015 15:50, Josep Portella Florit <jpf@primfilat.com> writes: >> >>> This code crashes Guile 2.0.11: >>> >>> (define x (make-dynamic-state)) >>> (with-dynamic-state x (lambda () (/ 1 0))) >> >> Sad :/ Fixed in 2.2 though, finally. I don't really know how to fix it >> in 2.0 though. Marking as closed given that we will have a shiny new >> 2.2.0 soon. > > Good work! Do I have to wait until you release 2.2.0 to test it? > (Today I've tested it with 2.1.7.22-fcebf and it still crashed.) Ack, I didn't actually test it! I thought a related fix in 2.1.7 would have caught it. I will have a look. > BTW, did you change your mind on deprecating dynamic states? > <http://lists.gnu.org/archive/html/guile-devel/2016-06/msg00104.html> Yes, with a caveat. Having captured dynamic states also be mutable places was untenable, as you could have multiple threads mutating the same place at one time. However dynamic states work well as a way to transport a parameterization from one part of the code to another. I rely on them in Fibers for this purpose. What do you think? :) See NEWS: ** Fix too-broad capture of dynamic stack by delimited continuations Guile was using explicit stacks to represent, for example, the chain of current exception handlers. This means that a delimited continuation that captured a "catch" expression would capture the whole stack of exception handlers, not just the exception handler added by the "catch". This led to strangeness when resuming the continuation in some other context like other threads; "throw" could see an invalid stack of exception handlers. This has been fixed by the addition of the new "fluid-ref*" procedure that can access older values of fluids; in this way the exception handler stack is now implicit. See "Fluids and Dynamic States" in the manual, for more on fluid-ref*. And: ** Dynamic states capture values, not locations Dynamic states used to capture the locations of fluid-value associations. Capturing the current dynamic state then setting a fluid would result in a mutation of that captured state. Now capturing a dynamic state simply captures the current values, and calling `with-dynamic-state' copies those values into the Guile virtual machine instead of aliasing them in a way that could allow them to be mutated in place. This change allows Guile's fluid variables to be thread-safe. To capture the locations of a dynamic state, capture a `with-dynamic-state' invocation using partial continuations instead. Andy ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#20938: make-dynamic-state, with-dynamic-state & exceptions 2017-03-01 17:30 ` Andy Wingo @ 2017-03-03 22:15 ` Josep Portella Florit 2017-03-06 19:55 ` Andy Wingo 2017-03-07 20:36 ` Andy Wingo 0 siblings, 2 replies; 11+ messages in thread From: Josep Portella Florit @ 2017-03-03 22:15 UTC (permalink / raw) To: Andy Wingo; +Cc: 20938 On 03/01/2017 06:30 PM, Andy Wingo wrote: > On Wed 01 Mar 2017 16:11, Josep Portella Florit <jpf@primfilat.com> writes: >> (Today I've tested it with 2.1.7.22-fcebf and it still crashed.) > > Ack, I didn't actually test it! I thought a related fix in 2.1.7 would > have caught it. I will have a look. OK, can you reopen the bug? >> BTW, did you change your mind on deprecating dynamic states? >> <http://lists.gnu.org/archive/html/guile-devel/2016-06/msg00104.html> > > Yes, with a caveat. Having captured dynamic states also be mutable > places was untenable, as you could have multiple threads mutating the > same place at one time. However dynamic states work well as a way to > transport a parameterization from one part of the code to another. I > rely on them in Fibers for this purpose. What do you think? :) Your use of `current-dynamic-state` in Fibers confused me, until I realized it works like `make-dynamic-state` in Guile 2.1. Good, now dynamic states are more analogous to Racket's parameterizations :-) ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#20938: make-dynamic-state, with-dynamic-state & exceptions 2017-03-03 22:15 ` Josep Portella Florit @ 2017-03-06 19:55 ` Andy Wingo 2017-03-07 20:36 ` Andy Wingo 1 sibling, 0 replies; 11+ messages in thread From: Andy Wingo @ 2017-03-06 19:55 UTC (permalink / raw) To: Josep Portella Florit; +Cc: 20938 reopen thanks (Hopefully the above commands will reopen the bug, if not I will do it via the other address; I am not very good with debbugs :) On Fri 03 Mar 2017 23:15, Josep Portella Florit <jpf@primfilat.com> writes: > On 03/01/2017 06:30 PM, Andy Wingo wrote: >> On Wed 01 Mar 2017 16:11, Josep Portella Florit <jpf@primfilat.com> writes: >>> (Today I've tested it with 2.1.7.22-fcebf and it still crashed.) >> >> Ack, I didn't actually test it! I thought a related fix in 2.1.7 would >> have caught it. I will have a look. > > OK, can you reopen the bug? ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#20938: make-dynamic-state, with-dynamic-state & exceptions 2017-03-03 22:15 ` Josep Portella Florit 2017-03-06 19:55 ` Andy Wingo @ 2017-03-07 20:36 ` Andy Wingo 2017-03-10 22:00 ` Josep Portella Florit 1 sibling, 1 reply; 11+ messages in thread From: Andy Wingo @ 2017-03-07 20:36 UTC (permalink / raw) To: Josep Portella Florit; +Cc: 20938-done On Fri 03 Mar 2017 23:15, Josep Portella Florit <jpf@primfilat.com> writes: > On 03/01/2017 06:30 PM, Andy Wingo wrote: >> On Wed 01 Mar 2017 16:11, Josep Portella Florit <jpf@primfilat.com> writes: >>> (Today I've tested it with 2.1.7.22-fcebf and it still crashed.) >> >> Ack, I didn't actually test it! I thought a related fix in 2.1.7 would >> have caught it. I will have a look. > > OK, can you reopen the bug? Fixed in master now. Thanks again for the report :) Andy ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#20938: make-dynamic-state, with-dynamic-state & exceptions 2017-03-07 20:36 ` Andy Wingo @ 2017-03-10 22:00 ` Josep Portella Florit 0 siblings, 0 replies; 11+ messages in thread From: Josep Portella Florit @ 2017-03-10 22:00 UTC (permalink / raw) To: Andy Wingo; +Cc: 20938-done On 03/07/2017 09:36 PM, Andy Wingo wrote: > Fixed in master now. Thanks again for the report :) I've just tested it; good work! ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-03-10 22:00 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-06-30 13:50 bug#20938: make-dynamic-state, with-dynamic-state & exceptions Josep Portella Florit 2015-07-01 6:49 ` bug#20938: Improved workaround Josep Portella Florit 2016-03-13 14:57 ` bug#20938: More information Josep Portella Florit 2016-06-24 7:11 ` bug#20938: make-dynamic-state, with-dynamic-state & exceptions Andy Wingo 2016-06-24 14:58 ` Josep Portella Florit 2017-02-28 14:17 ` Andy Wingo [not found] ` <1b66634b-9e69-da86-116a-088eafb383e7@primfilat.com> 2017-03-01 17:30 ` Andy Wingo 2017-03-03 22:15 ` Josep Portella Florit 2017-03-06 19:55 ` Andy Wingo 2017-03-07 20:36 ` Andy Wingo 2017-03-10 22:00 ` Josep Portella Florit
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).