On Mon, 08 Nov 2010 15:32:56 -0500
Jesse Phillips <jessekphillip...@gmail.com> wrote:

> But they are past by reference. You can modify the data all you want, but 
> cannot reassign the reference itself.

No, they are _not_ passed by reference. Stop saying that, this is precisely 
what causes confusion. This is reference semantics:

class C {
    int* ints;
}
void main () {
    auto c = new C();
    auto d = c;
    auto ints = [1,2,3];
    c.ints = &(ints[0]);
    assert(c.ints == d.ints);
    assert(*(c.ints) == *(d.ints));
}

Whatever change one performs on object fields never breaks the relation with 
other vars pointing to the same object; because the object itself is referenced.
D arrays do not work that way: the kind of struct is *copied*, not referenced; 
arrays themselves are *values*. So that changes to the content that requires 
reallocation breaks the relation.
(Additional confusion is brought by the fact that, if a is an array, after 
"b=a" (b is a) yields true, for any reason, but this is also wrong. I guess 
'is' is overloaded for arrays to compare the adresses of the contents instead 
of the ones of the array-structs, but this is misguided.)


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

spir.wikidot.com

Reply via email to