On 11/20/2010 05:09 PM, spir wrote:
???
backdoor and s do not denote the same element. One is a mutable array, the other is 
immutable. Why should changing backdoor affect s? Whether backdoor and chars denote the 
same array depends on whether "=" copies or not dyn arrays. But from immutable 
string to mutable array, there must be a copy (read: dup).

Must also be a copy the other way. Secret heap allocations are not fun.

Anyway, the most annoying issue is not about assignments inside a given scope, 
but parameter passing (including implicit ones like in Andrei's example of 
foreach).
        void f (char[] chars) {}
        void g (string str) {}
        ...
        string str = "abc";
        char[] chars = "abc".dup;
        f(str);
        g(chars);
__trials__.d(30): Error: function __trials__.f (char[] chars) is not callable 
using argument types (string)
__trials__.d(31): Error: function __trials__.g (string str) is not callable 
using argument types (char[])
        ...
        f(str.dup);     // ok
        g(chars.idup);  // ditto


I do not understand the alternative.


By the way, why isn't the definition of string immutable(char[]), instead of 
immutable(char)[]?


string s = "abc";
s = "bde"; // fails with immutable(char[]), rightly so.

Reply via email to