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