From: Andy Wingo <wingo@pobox.com>
To: Josep Portella Florit <jpf@primfilat.com>
Cc: 20938@debbugs.gnu.org
Subject: bug#20938: make-dynamic-state, with-dynamic-state & exceptions
Date: Wed, 01 Mar 2017 18:30:09 +0100 [thread overview]
Message-ID: <87wpc8dhwe.fsf@pobox.com> (raw)
In-Reply-To: <1b66634b-9e69-da86-116a-088eafb383e7@primfilat.com> (Josep Portella Florit's message of "Wed, 1 Mar 2017 16:11:03 +0100")
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
next prev parent reply other threads:[~2017-03-01 17:30 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87wpc8dhwe.fsf@pobox.com \
--to=wingo@pobox.com \
--cc=20938@debbugs.gnu.org \
--cc=jpf@primfilat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).