spir wrote:

> On Sat, 20 Nov 2010 15:22:37 +0100
> Tomek Sowiński <j...@ask.me> wrote:
> 
>> > I find this proposal really necessary. But aren't there two issues
>> > here? * Comparison (for lookup) by value equality should not care about
>> > qualifiers (ie compare raw content, here plain array memory areas).
>> > * Assignment should perform "qualification conversion" automatically,
>> > eg char[] chars = "abc";
>> > string s = chars;
>> > This involves no implicit magic here, as target qualification is
>> > explicit. So, why not?
>> 
>> It's busting the whole const system to smithereens.
>> 
>> char[] chars = "abc";
>> char[] backdoor = chars;
>> string s = chars;
>> assert (s == "abc");
>> backdoor.front = 'k';
>> assert (s == "abc"); // fails. not so immutable, huh?
> 
> ???
> 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).
> 
> 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
> 
>> > There is a repetitive programming pattern in D:
>> > * play around with *string's in general
>> > * as soon as text processing is needed, convert to *char[]
>> > * when finished, convert back to *string
>> 
>> Meh, immutable strings make life easier.
> 
> For sure, I'm 100% for immutable strings by default, esp that literals
> produce immutable elements. But one cannot perform text processing on
> immutable thingies: s[3] = 'x'; s.replace("abc","ABC");
> So that we constantly have to juggle between mutable and immutable
> versions of, conceptually, the _same value_.
> 
> By the way, why isn't the definition of string immutable(char[]), instead
> of immutable(char)[]?
I believe it is so you can reassign. Consider

string s = "hello";
s = "good bye";
> 
> 
> Denis
> -- -- -- -- -- -- --
> vit esse estrany ☣
> 
> spir.wikidot.com

Reply via email to