On Friday, 21 March 2014 at 07:14:47 UTC, Walter Bright wrote:
On 3/21/2014 12:03 AM, monarch_dodra wrote:
On Friday, 21 March 2014 at 03:04:36 UTC, Steven Schveighoffer wrote:
Thinking about it some more, I see what you mean -- an unshared mutex is useless.

But at the same time, some "logically" pure functions cannot be so without
mutexes. E.g. memory allocation.

Since when does "shared" => "impure" ?

If the function takes a pointer to shared data, then you are explicitly saying "this function depends on this shared data". But as long is it isn't referencing
some *other* global directly, it is perfectly pure.

We've been using 'shared' here to mean shared with another piece of code that looks at the state, not 'shared' as in data shared amongst multiple threads.

Ok. That's a fair point. So in that case, our function is pointing at "data", and is allowed to mutate it, and observe its state.

Now, if *another* piece of code is doing the same thing at the same time (potentially mutating "data", does that still violate purity?

As long a the function doesn't access/mutate something via direct global state, it's pure, isn't it?

I think... it's tough to wrap your head around the issue.

Reply via email to