On Friday, 16 March 2012 at 18:56:00 UTC, Timon Gehr wrote:
It can't because there must be a terminating zero byte. It does
not do it even if it could though.
immutable string x = "123";
immutable string y = "123";
void foo(string a){
string b = "123";
writeln(a is b);
}
void main(){
string a = "123";
string b = "456";
string c = "456123";
foo(c[3..$]); // false
writeln(x is y); // false
writeln(a is x); // false
writeln(b is x); // false
writeln(a is y); // false
writeln(b is y); // false
foo(a); // true
foo(b); // false
}
So while D does pool strings, it doesn't seem to optimize
globals. I couldn't find anything about it on the bug tracker.