On Wed, 1 Dec 2010 03:25:24 -0800
Jonathan M Davis <jmdavisp...@gmx.com> wrote:

> On Wednesday 01 December 2010 03:17:48 spir wrote:
> > Well, nearly everything is in the title... I would intuitively opt for the
> > second type if I had to define an immutable string type.
> > 
> > Answers from various points of view (semantic, praticality, efficiency...)
> > would be great if ever they may differ.
> 
> string str = "hello";
> str ~ = " world";
> 
> That's wouldn't be possible if string were fully immutable.

This, I do not understand. I thought immutable applies to the value, not to the 
variable. At least, this is what I know from other languages using immutable; 
but it seems, then, that this term does not mean the same in D. Immutable, for 
me, mean no reference to the value can change it. Thus, for instance:
    immutable(char[]) s = "abc";
    immutable(char[])* p = &s;
    *p = "def";     // Error: *p is not mutable

EDIT: All right, got it! I was caught once more by the fact that, for most 
types, in languages of the traditional imperative kind, a variable maps to a 
memory cell. Thus, immutability of the value also means "unchange-ability" of 
the variable. In other words:
    s = "def";      // Error: variable __trials__.main.s cannot modify immutable
because there is no way to change or replace s's value without mutating the 
original one. If I change s, then *p will see it. Is this reasoning correct?

(I was mislead because, in functional and dynamic languages from which I learnt 
the notion of immutability, elements are referenced, so that one can change a 
variable denoting an immutable value: it just silently points to another place 
in memory, but the original value never mutates. In such a language, changing s 
would not affect any other reference to the original value. Eg, python strings 
are immutable and referenced:
    s = "abc" ; t = s
    s = "def"
    print s,t           # "def abc"
)

> And since the fact 
> that the elements of a string are immutable, passing a string to a function 
> is 
> guaranteed not to mess with the original, even if they append to the one 
> passed 
> in. So, making it fully immutable wouldn't really buy you anything anyway.

Yop.

> - Jonathan M Davis

Thank you, Jonathan.

Denis
-- -- -- -- -- -- --
vit esse estrany ☣

spir.wikidot.com

Reply via email to