On 12/28/11 11:42 AM, Peter Alexander wrote:
On 28/12/11 4:27 PM, Andrei Alexandrescu wrote:
The problem is escaping. A function that transitorily operates on a
string indeed does not care about the origin of the string, but storing
a string inside an object is a completely different deal. The setup

class Query
{
string name;
...
}

is safe, minimizes data copying, and never causes surprises to anyone
("I set the name of my query and a little later it's all messed up!").

So immutable(char)[] is the best choice for a correct string abstraction
compared against both char[] and const(char)[]. In fact it's in a way
good that const(char)[] takes longer to type, because it also carries
larger liabilities.

I don't follow your argument. You've said (paraphrasing) "If a function
does A then X is best, but if a function does B then Y is best, so Y is
best."

I'm saying (paraphrasing) "X is modularly bankrupt and unsafe, and Y is modular and safe, so Y is best".

If a function needs to store the string then by all means it should use
immutable(char)[]. However, this is a much rarer case than functions
that simply use the string transitorily as you put it.

Rarity is a secondary concern to modularity and safety.

Again, there are very, very few functions in Phobos that accept a string
as an argument. The vast majority accept `const(char)[]` or `in char[]`.
This speaks volumes about how useful the string alias is.

Phobos consists of many functions and few entity types. Application code is rife with entity types. I kindly suggest you reconsider your position; the current setup is indeed very solid.


Andrei

Reply via email to