Behaviour of append (~=)

Lionello Lunesu lio at lunesu.remove.com
Tue May 30 06:30:21 PDT 2006


Derek Parnell wrote:
> On Tue, 30 May 2006 21:37:02 +1000, Lionello Lunesu 
> <lio at lunesu.remove.com> wrote:
> 
>> Why does the appending to a 'null' array cause the contents to be copied?
>>
>> int[] ar1; // some array, not constant
>>
>> int[] ar2 = null;
>> ar2 ~= ar1;
>> // ar2 !is ar1
>>
>> But it could be like this:
>> if (ar2)
>>    ar2 ~= ar1;
>> else
>>    ar2 = ar1;
>>
>> Wouldn't it be a good optimization for ~= to check for null first, to 
>> prevent the copy?
> 
> Not so sure, because for consistency sake its good to know that 'append' 
> will always do a copy. Then we can rely on this to happen.
> 
> --Derek Parnell
> Melbourne, Australia

But, take std.string.replace for example. It only copies when needed. 
Isn't this "exactly what you expect it to do"? I thought this was 
kind-of understood by COW.

Also, I don't think it's safe to rely on the copy to happen. If 
everything follows COW rules, then that's all you need to know, and 
AFAIC ~= copying only iff lhs !is null is a normal COW rule.

L.



More information about the Digitalmars-d-learn mailing list