const?? When and why? This is ugly!
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Mar 7 00:23:35 PST 2009
Walter Bright wrote:
> When we first got into what to do with strings and
> const/immutable/mutable, I was definitely in the camp that strings
> should be mutable char[], or at worst const(char)[]. The thing is,
> Andrei pointed out to me, languages that are considered very good at
> dealing with strings (like Perl) use immutable strings. The fascinating
> thing about strings in such languages is:
>
> "Nobody notices they are immutable, they just work."
>
> So what is it about immutability that makes strings "just work" in a
> natural and intuitive manner? The insight is that it enables strings,
> which are reference types, to behave exactly as if they were value types.
>
> After all, it never occurs to anyone to think that the integer 123 could
> be a "mutable" integer and perhaps be 133 the next time you look at it.
> If you put 123 into a variable, it stays 123. It's immutable. People
> intuitively expect strings to behave the same way. Only C programmers
> expect that once they assign a string to a variable, that string may
> change in place.
>
> C has it backwards by making strings mutable, and it's one of the main
> reasons why dealing with strings in C is such a gigantic pain. But as a
> longtime C programmer, I was so used to that I didn't notice what a pain
> it was until I started using other languages where string manipulation
> was a breeze.
>
> The way to do strings in D is to have them be immutable. If you are
> building a string by manipulating its parts, start with mutable, when
> finished then convert it to immutable and 'publish' it to the rest of
> the program. Mutable char[] arrays should only exist as temporaries.
> This is exactly the opposite of the way one does it in C, but if you do
> it this way, you'll find you never need to defensively dup the string
> "just in case" and things just seem to naturally work out.
>
> I tend to agree that if you try to do strings the C way in D2, you'll
> probably find it to be frustrating experience.
That hit the spot.
Andrei
More information about the Digitalmars-d
mailing list