[fpc-pascal] PChar & AnsiString
Martin
fpc at mfriebe.de
Tue Jun 1 16:00:47 CEST 2010
On 01/06/2010 11:23, spir ☣ wrote:
> What is the actual benefit of copy-on-write? I ask because of the following reasoning:
> * If a string is just used at several places, for example in output or into bigger strings, then there is no reason reason to copy it into a new variable.
> * If a programmer explicitely assigns an existing string to a new variable, the intent is precisely copy-semantics, to make them independent for further changes. If there is no change, there is also no reason for such an assignment.
> As a consequence, s2:=s1 will nearly always be followed by modification of either string, which will result on copy anyway, according to copy-on-write semantics. So, the initial gain at assignment time is soon lost. While the cost I imagine in terms of type complexity remains (every builtin modification method must ensure copying; no user-defined modification method should be possible without using builtin ones -- else copy-on-write is lost and consequences undefined).
>
No, an assignment, or increase in ref count is not necessarily followed
by a change:
Procedure Foo(a:String);
begin ... end;
Procedure Bar;
var s: string;
begin
s:= SomeString;
Foo(s);
end;
Now a copy of s has to be given to Foo, because Foo *may* changes the
string. But Foo may also *not* change the string => so leave it till later.
Example 2:
Procedure Bar;
var a, b: string;
begin
a:= SomeString;
b:=a;
if SomeCondition then
b:=b+"...";
if SomeOtherCondition then
b:=b+"???";
end;
So b may never be changed at all.
Martin
More information about the fpc-pascal
mailing list