Warning: explicit element-wise assignment (this.vector)[] = vec.vector[cast(ulong)0..cast(ulong)dimension]

bearophile bearophileHUGS at lycos.com
Mon Jun 24 13:50:52 PDT 2013


David:

> What kind of bugs does it avoid?
> I can't think of a single bug which could happen...
> (Ranges/Lengths are checked at runtime...)

Some reasons:
- Syntax uniformity: similar behaviours should look similar. This 
is a general rule of language design, that avoids troubles you 
don't even know. All array ops use [], so it's right for vector 
assignment to use them.
- The second rule is that in a language as D we want to denote 
different code complexities with different code. This is the 
reason given in the Changelog, and it explains while length and 
walkLength have different names.
In past you were not able to tell from a look at the syntax 
what's happening:

void main() {
     int[][3] x;
     int[]    y;
     int[]    z;

     x[] = z; // copies just the z pointer
     y[] = z; // copies the elements in z
}


More details:
http://d.puremagic.com/issues/show_bug.cgi?id=7444
Coming from this older:
http://d.puremagic.com/issues/show_bug.cgi?id=3971

You are welcome,
bearophile


More information about the Digitalmars-d-learn mailing list