string literal error?
badmadevil at gmail.com
Sat May 10 00:07:49 PDT 2008
Simen Kjaeraas wrote:
> badmadevil <badmadevil at gmail.com> wrote:
>> I see, .reverse is buggy in D2 situation.
>> How about D1?
>> string in D1 is just alias of char. It should be valid in the case
>> of x.reverse. (x is of type char)
>> It seems that the reason x,y,z reference to same string literal is to
>> reduce bloated string data in the .exe (repeated literal array of other
>> type, eg. integer, may not be reduced).
>> dup/idup each literal array may avoid such bug, but would it be handy
>> that idup/dup be implictly called during runtime?
> Consider the case where you have a 2MB string literal (for some weird
> reason), with 1K references to it. Would you like for the program to call
> .dup on each of those? A bit hypothetical, I know, but it should highlight
Got the idea. Thank you!
> the problem. I believe for D1, COW (copy on write) is how things should
> work. In other words, the correct D1 program would look like this:
> string x = "bug?";
> string y = "bug?";
> string z = "bug?".dup.reverse; // copy because we're changing it
> x.dup.reverse; // copy because we're changing it
> In the context of D1, I can see how non-duped string literals may be a
> source of bugs, indeed. This (except that it does not work :p) is one of
> the reasons I like D2's invariant strings.
> -- Simen
More information about the Digitalmars-d-learn