const?? When and why? This is ugly!
Walter Bright
newshound1 at digitalmars.com
Sat Mar 7 14:43:50 PST 2009
If I may restate your case, it is that given function that does
something with character arrays:
int foo(string s);
and you wish to pass a mutable character array to it. If foo was
declared as:
int foo(const(char)[] s);
then it would just work. So why is it declared immutable(char)[] when
that isn't actually necessary?
The answer is to encourage the use of immutable strings. I believe the
future of programming will tend towards ever more use of immutable data,
as immutable data:
1. is implicitly sharable between threads
2. is more conducive to static analysis of programs
3. makes it easier for programmers to understand code
4. enables better code generation
5. allows taking a private reference to without needing to make a copy
const(char)[], on the other hand, still leaves us with the temptation to
make a copy "just in case". If I, as a user, sees:
int foo(const(char)[] s)
what if foo() keeps a private reference to s (which it might if it does
lazy evaluation)? Now I, as a caller, mutate s[] and muck up foo. So, to
fix it, I do:
foo(s.dup); // defensive copy in case foo keeps a reference to s
But the implementor of foo() doesn't know it's getting its own private
copy, so the first line of foo() is:
int foo(const(char)[] s)
{
s = s.dup; // make sure we own a copy
}
so the defensive, robust code has TWO unnecessary copies.
More information about the Digitalmars-d
mailing list