parameter mutation and per-thread storage Shiro Kawai (08 Sep 2021 08:19 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (08 Sep 2021 09:24 UTC)
Re: parameter mutation and per-thread storage Shiro Kawai (09 Sep 2021 04:14 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (13 Sep 2021 08:32 UTC)
Re: parameter mutation and per-thread storage Shiro Kawai (17 Sep 2021 00:07 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (21 Sep 2021 15:55 UTC)
Re: parameter mutation and per-thread storage Shiro Kawai (22 Sep 2021 20:24 UTC)
Re: parameter mutation and per-thread storage John Cowan (10 Sep 2021 02:33 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (13 Sep 2021 07:47 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (05 Nov 2022 19:52 UTC)
Re: parameter mutation and per-thread storage Shiro Kawai (05 Nov 2022 20:39 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (05 Nov 2022 20:57 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (05 Nov 2022 21:00 UTC)

Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen 05 Nov 2022 21:00 UTC

Am Sa., 5. Nov. 2022 um 21:57 Uhr schrieb Marc Nieper-Wißkirchen
<xxxxxx@gmail.com>:
>
> Am Sa., 5. Nov. 2022 um 21:39 Uhr schrieb Shiro Kawai <xxxxxx@gmail.com>:
> >
> > Is it pushed?  The visible HEAD on github is 6a2319d.
>
> I forgot to push it.  Should be visible now.
>
> >
> > Actually I was composing an email regarding per-thread parameters.  As I'm revising Gauche to adopt srfi-226, some concern arose from users.  In most use cases, the existing code that uses parameters for thread local storage can be rewritten using thread-locals.  However, there are cases that it's not trivial to migrate; for example, a parameter is defined elsewhere, and a library mutates it, assuming it's thread-safe.  It is ok if the library can rewrite it using parameterize to avoid mutation, but it's not always trivial.  So I plan to provide per-thread parameters at least for a while during transition.
> >
> > On the other hand, per-thread parameters do seem to complicate implementation.  My plan is to copy the parameterization chain when a thread is created, and normal parameters would share a box, while per-thread parameters would have separate boxes.  It incurs more overhead of thread creation.   I wonder if there's a better way.
>
> The solution in the sample implementation (see hopefully pushed
> commit) is to use inheritable thread-local cells. For thread
> parameters, parameterize creates a new inheritable thread-local cell
> whose default is the new value.
>
> To speed up thread creation (which needs to copy values of inheritable
> thread locals) observe that only those inheritable thread locals have
> to be copied that have ever been set.  So only those have to be kept
> in a (weak) list.  This means that parameterize means no overhead for
> thread creation, only mutating of a thread parameter.
>
> (I haven't made this optimization in my sample implementation yet.)

It's already too late here: this particular optimization is part of
the sample implementation. But there are other areas where it can be
improved.

> Thank you very much for your feedback!
>
> Marc