On Tuesday, 2 July 2013 at 13:07:40 UTC, Regan Heath wrote:
It is done for performance reasons. On UNIX the compiler will put the literal "abc" into read only memory. It could/should do the same on windows but doesn't yet (I believe).

So, the compiler is treating them as such, by giving them the type immutable(char)[] (AKA string).

And, the spec should, if it doesn't, define string literals to be immutable.


Ok I understand. What I did as a first thing when I get error on "char[] x = "a" was "char x = cast(char[])"a", Which was obviously incorrect - as the "a" was/should be placed in rom. So if this expression is allays wrong - casting string literal to mutable, then compiler should emit an error on this (If one implementation (dmd/win) makes this valid, it still doesn't mean compiler should honor implementation over specification - amusing it is specified that strings go into rom...)"

Also, given you explanation, I see it as good to type "auto x = "a" as string, but give explicit notation char[] x = "a" - I don't see reason to not allow string literal to be typed as both char[] and string at the same time, and convert to char[] - and also place in ram, if explicitly asked.

The only reason that comes now to mi mind is when working with old code base - before auto and immutable(char)[] .. the code had to use char[] x = "a", but these must be all eliminated by now....

Reply via email to