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.