Review of SRFI 170 through 3.2 I/O hga@xxxxxx 22 Apr 2020 17:13 UTC
Re: Review of SRFI 170 through 3.2 I/O John Cowan 22 Apr 2020 20:42 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 22 Apr 2020 20:53 UTC
Re: Review of SRFI 170 through 3.2 I/O John Cowan 22 Apr 2020 21:29 UTC
Re: Review of SRFI 170 through 3.2 I/O hga@xxxxxx 22 Apr 2020 23:57 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 22 Apr 2020 21:36 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 22 Apr 2020 21:42 UTC
Re: Review of SRFI 170 through 3.2 I/O John Cowan 23 Apr 2020 03:37 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 23 Apr 2020 07:02 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 23 Apr 2020 07:05 UTC
Re: Review of SRFI 170 through 3.2 I/O Göran Weinholt 23 Apr 2020 10:53 UTC
Re: Review of SRFI 170 through 3.2 I/O Marc Feeley 23 Apr 2020 11:09 UTC
Per-thread umask Lassi Kortela 23 Apr 2020 11:30 UTC
Re: Per-thread umask Marc Feeley 23 Apr 2020 11:43 UTC
Re: Per-thread umask Lassi Kortela 23 Apr 2020 11:47 UTC
Re: Per-thread umask Marc Feeley 23 Apr 2020 11:59 UTC
Re: Per-thread umask John Cowan 23 Apr 2020 15:03 UTC
Re: Per-thread umask Marc Feeley 23 Apr 2020 15:20 UTC
Re: Per-thread umask Lassi Kortela 23 Apr 2020 16:02 UTC
Re: Per-thread umask John Cowan 23 Apr 2020 16:03 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 23 Apr 2020 11:14 UTC
current directory and openat() et al Lassi Kortela 23 Apr 2020 11:27 UTC
Re: current directory and openat() et al Marc Feeley 23 Apr 2020 13:56 UTC
Re: Review of SRFI 170 through 3.2 I/O Sebastien Marie 23 Apr 2020 13:32 UTC
Definition of working directory Lassi Kortela 23 Apr 2020 13:51 UTC
Re: Definition of working directory Marc Feeley 23 Apr 2020 14:06 UTC
Re: Definition of working directory Sebastien Marie 23 Apr 2020 15:31 UTC
Re: Review of SRFI 170 through 3.2 I/O Marc Nieper-Wißkirchen 23 Apr 2020 15:24 UTC
Separate high-level and low-level APIs Lassi Kortela 23 Apr 2020 15:38 UTC
Re: Separate high-level and low-level APIs Marc Nieper-Wißkirchen 23 Apr 2020 15:43 UTC
Re: Separate high-level and low-level APIs Lassi Kortela 23 Apr 2020 15:48 UTC
Re: Separate high-level and low-level APIs hga@xxxxxx 23 Apr 2020 16:19 UTC
Re: Separate high-level and low-level APIs Lassi Kortela 23 Apr 2020 16:42 UTC
Re: Review of SRFI 170 through 3.2 I/O hga@xxxxxx 23 Apr 2020 15:40 UTC
Re: Review of SRFI 170 through 3.2 I/O Marc Feeley 23 Apr 2020 11:33 UTC
Normalizing the current directory Lassi Kortela 23 Apr 2020 11:38 UTC
Re: Normalizing the current directory Marc Feeley 23 Apr 2020 11:55 UTC
Re: Normalizing the current directory Lassi Kortela 23 Apr 2020 12:09 UTC
Using paths that are searchable but not completely readable hga@xxxxxx 23 Apr 2020 12:29 UTC
Per-thread working directory and umask proposal John Cowan 23 Apr 2020 14:13 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 23 Apr 2020 14:16 UTC
Re: Per-thread working directory and umask proposal John Cowan 23 Apr 2020 16:07 UTC
Re: Per-thread working directory and umask proposal Marc Nieper-Wißkirchen 23 Apr 2020 16:13 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 23 Apr 2020 16:25 UTC
Re: Per-thread working directory and umask proposal Marc Nieper-Wißkirchen 23 Apr 2020 17:26 UTC
Re: Per-thread working directory and umask proposal John Cowan 23 Apr 2020 18:38 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 23 Apr 2020 17:55 UTC
Re: Per-thread working directory and umask proposal Marc Nieper-Wißkirchen 23 Apr 2020 18:55 UTC
Re: Per-thread working directory and umask proposal John Cowan 23 Apr 2020 20:12 UTC
Re: Per-thread working directory and umask proposal Shiro Kawai 23 Apr 2020 22:17 UTC
Re: Per-thread working directory and umask proposal Lassi Kortela 24 Apr 2020 08:43 UTC
Re: Per-thread working directory and umask proposal Shiro Kawai 24 Apr 2020 11:27 UTC
Re: Per-thread working directory and umask proposal Lassi Kortela 24 Apr 2020 11:37 UTC
Re: Per-thread working directory and umask proposal Shiro Kawai 24 Apr 2020 12:22 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 24 Apr 2020 12:28 UTC
Re: Per-thread working directory and umask proposal Marc Nieper-Wißkirchen 26 Apr 2020 09:19 UTC
Re: Per-thread working directory and umask proposal John Cowan 27 Apr 2020 22:45 UTC
Re: Per-thread working directory and umask proposal Shiro Kawai 27 Apr 2020 23:42 UTC
Re: Per-thread working directory and umask proposal John Cowan 28 Apr 2020 00:41 UTC
Re: Per-thread working directory and umask proposal Shiro Kawai 28 Apr 2020 00:56 UTC
os-working-directory Lassi Kortela 29 Apr 2020 09:23 UTC
Re: os-working-directory Duy Nguyen 29 Apr 2020 09:28 UTC
current-umask Lassi Kortela 29 Apr 2020 09:43 UTC
Windows Lassi Kortela 29 Apr 2020 09:47 UTC
Re: Windows Lassi Kortela 29 Apr 2020 09:49 UTC
Re: Windows John Cowan 29 Apr 2020 14:53 UTC
Re: current-umask hga@xxxxxx 29 Apr 2020 13:14 UTC
Re: current-umask Lassi Kortela 29 Apr 2020 13:25 UTC
Re: current-umask Marc Feeley 29 Apr 2020 13:31 UTC
Re: current-umask Marc Feeley 29 Apr 2020 13:45 UTC
Re: current-umask Lassi Kortela 29 Apr 2020 14:12 UTC
Re: current-umask hga@xxxxxx 29 Apr 2020 16:20 UTC
Re: current-umask Lassi Kortela 29 Apr 2020 16:44 UTC
Re: current-umask John Cowan 30 Apr 2020 04:02 UTC
Re: os-working-directory John Cowan 30 Apr 2020 02:49 UTC
Re: os-working-directory Lassi Kortela 30 Apr 2020 06:12 UTC
Re: os-working-directory Sebastien Marie 30 Apr 2020 07:19 UTC
Re: os-working-directory Sebastien Marie 30 Apr 2020 07:53 UTC
Should the SRFI mandate current-directory per thread? Lassi Kortela 30 Apr 2020 12:14 UTC
Re: Should the SRFI mandate current-directory per thread? Sebastien Marie 30 Apr 2020 17:00 UTC
Re: Per-thread working directory and umask proposal hga@xxxxxx 28 Apr 2020 01:03 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 28 Apr 2020 01:41 UTC
Re: Per-thread working directory and umask proposal Marc Nieper-Wißkirchen 30 Apr 2020 07:11 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 30 Apr 2020 11:33 UTC

Re: Per-thread working directory and umask proposal Marc Feeley 23 Apr 2020 17:55 UTC

> On Apr 23, 2020, at 1:26 PM, Marc Nieper-Wißkirchen <xxxxxx@nieper-wisskirchen.de> wrote:
>
> Am Do., 23. Apr. 2020 um 18:25 Uhr schrieb Marc Feeley
> <xxxxxx@iro.umontreal.ca>:
>
> [...]
>
>>> b) get a per-thread CWD that is a copy of foo's per-thread CWD, or
>>>
>>> c) get a per-thread CWD that *is* foo's per-thread CWD, such that mutations done in foo are visible in bar and vice versa?
>>
>> c of course… :-)  Copying the parameter (option b) would introduce a restriction (not being able to mutate) that is an arbitrary choice by the spec designer.  If the programmer wants a copy they can add a (parameterize ((current-directory (current-directory))) …) around their code.  I think it is a bad design in general to do something automatically that can’t be undone.  Also, if you argue that copying parameters is “the right thing” you may introduce performance issues when the dynamic environment contains lots of bindings.
>
> I would argue instead that option (b) is the more general.  If you
> want mutability across threads, just put the value in a box and don't
> modify the parameter directly but just what's in the box. With (c), on
> the other hand, you cannot get true thread local parameters, can you?
> The reparameterization trick you mention does not work if the code
> spawning the thread does not know about all thread-local parameters.

You could simply add a (dynamic-env-copy thunk) procedure that runs thunk with all the dynamic environment bindings copied, which could be useful anyway as a general purpose operation.

Your argument is similar to saying that we could get rid of “set!” altogether by just doing (define var (box val)) whenever we want a mutable variable.  Then get rid of set-car! similarly… to just have box and set-box!.  Very MLish!  I view that as taking something away from my language, not the other way around!

In any case, mutation of parameter objects should not be viewed as good style, similarly to the use of “set!”.  But this does not mean I want to remove it from the language because in some cases it is the right thing to use.

If parameter bindings are automatically copied when a thread is started it prevents that new thread from changing the parent’s parameter bindings easily, but it is still possible to do so with continuations in a contrived way…  by having the child call a continuation created in the parent (because the dynamic environment is captured by the continuation) and arranging for control to come back to the child (with another continuation).  So this means copying the dynamic bindings on thread creation makes a simple thing (parameter object mutation) very complex to achieve, but not impossible… so you don’t get a “reliable parameter independence” property.

If the parent thread wants the child to have a copy of the dynamic bindings, I prefer that this be stated explicitly with:

  (thread-start! (dynamic-env-copy (lambda () (make-thread (lambda () …)))))

but I would probably never use that in my own code because I rarely find the need to mutate parameter objects.

>
> With respect to the performance issues, I have no simple answer yet.
> It would suffice to spawn parameters on demand, which would just make
> the mutation more costly, I think.

I’m not sure I follow.  You mean a kind of “copy-on-write”?  I’d like to see the implementation of that and compare the performance to the case where there is no copy involved.

Marc