Steven Schveighoffer Wrote:

> Bottom line: if a function isn't supposed to change the buffer, the  
> signature should be const for that parameter.  It's one of the principles  
> of const, and why it's in D2 in the first place.  I'd explain to the coder  
> that he is wrong to expect that modifying a buffer in a function that  
> isn't supposed to modify a buffer is acceptable (and hopefully he gets it,  
> or else I don't have time to deal with people who insist on being right  
> when they are not).
> 
> BTW, in my experience, the newbie expectaction of ~= is usually that it  
> modifies the original even when it doesn't, not the other way around.
> 

The guy insists that the reallocation happens in the quote function (otherwise 
there would be stomping), so no sharing happens and the original is not 
modified. He tested it on a variety of inputs! I'm not totally making it up--I 
had this kind of arguments with C++ programmers. You tell them that it's safer 
to use const and they laugh at you. "My code works, why should I change it!"

> >> Second, the optimizer cannot do simple math optimization on src.length -=  
> 1 and src.length += 1 because length is a property, not a field.  Setting  
> the length calls a function, which cannot be optimized out.
 
You are again resorting to implementation. I guess in the current 
implementation it's true that the compiler will indeed insert a call to its 
internal function. But the language spec does not proscribe that. 

Would you also argue that this optimization is incorrect? Changing:

a.length += 2;
a.length += 3;

to:

a.lenght += 5;

I'm not saying that this is an unsolvable problem. I'm just showing how hard it 
is to reason about D arrays. 

Reply via email to