[fpc-pascal] Dynamic arrays, yet another pitfall

Martin Frb lazarus at mfriebe.de
Mon Feb 17 17:50:44 CET 2014


On 17/02/2014 16:40, Jürgen Hestermann wrote:
> Am 2014-02-17 10:38, schrieb Lukasz Sokol:
> > To 'write' usually means : changing DATA element(s). That's it.
>
> What else is it when adding or removing elements? The array is 
> modified. That can only mean it was written to it.
>
>
> > SetLength is /not/ a write in this sense : because you're resizing 
> the paper you're
> > going to write on (e.g. adding another page or cutting it to size)
>
> But changing the size it is a modification!

It does not matter.

Who says that it is an effect of the (implicit) write that triggers the 
copy?
For strings there is UniqueInstance(), and even though it does not write 
to the string, it makes a copy, if needed.

SetLength is a function too.
SetLength includes making the array unique as part of its function 
description.

So this "making unique" does not happen because of COW (which does not 
apply), but because of the (now) documented effects of a function used 
on the array.

In the same way I can write functions for an object that performs a 
(modifying) operation on the object, and copies the object before.
Yet if I  wrote such code, no one would say, that the object I use, has COW.



More information about the fpc-pascal mailing list