Steven Schveighoffer wrote:
On Wed, 22 Sep 2010 15:21:57 -0400, klickverbot <s...@klickverbot.at> wrote:

On 9/22/10 9:14 PM, Steven Schveighoffer wrote:
Hypothetical counter-case

struct S
{
version(stronglypure)
string s;
else
char[] s;
}

pure foo(S s); // changes strength depending on S' contents

-Steve

This is a change to the signature of foo – S with the stronglypure version defined and S without it are two completely distinct types.

Wait, I didn't change foo's signature at all. This is what the OP meant by long-range changes. S can be defined far away from foo, and out of the author of foo's control.

-Steve

Is that really what he meant?
Note that foo() would need to be recompiled, and the silent change in strength would occur only if it still compiles despite a significant change in the definition of one of types.

If you change the definition of a type, you're always going to have influences everywhere it's used in a function definition. I'd hardly call that a 'long-range' change.

By contrast, in a language where you don't have pure at all, if someone sticks in a global variable somewhere, (even in a separate library), then code could suddenly have severe contention with another thread.
That's long range, and nearly impossible to track down.

Reply via email to