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