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.

For example:

//----
int i = 5;

void foo(int* p) pure
{++p;}

void main() pure
{
    foo(&p);
}
//----

This is "textbook" of a pure function changing global state.

----------------

So the way I see it: shared => pinter to mutex => touching it is fair game => can be legit pure (IMO).

Reply via email to