Steven Schveighoffer:
On Tue, 15 Apr 2014 13:46:11 -0400, bearophile
What do you think are the reasons I suggested the enhancement for?

To make people write code the way you like? :)

Honestly, it's like you require someone to call a function like:

T foo(T)(T t){return t;}

Just so you can see the foo there. I understand the idea, but the result is not logical, just superficial.

Issue 7444 allows to tell apart the two very different operations of this code, that look the same:


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

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


In Phobos there are awkward names like walkLength, and in D we don't have a built-in "x in array" syntax, both just to tell apart the O(1) cases from the O(n) ones. Requiring the [] when you perform an array copy (instead of just a copy of the slice struct) allows to visually tell apart the O(1) operations from the O(n) ones:

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



the result is not logical, just superficial.

In D vector operations are allowed only with the [] syntax:

void main() {
    int[] a, b;
    a = a + b;       // Wrong
    a[] = a + b;     // Wrong
    a = a[] + b;     // Wrong
    a = a + b[];     // Wrong
    a[] = a[] + b;   // Wrong
    a = a[] + b[];   // Wrong
    a[] = a[] + b[]; // OK
}

A copy of the items can be seen as the simplest vector operation, so I think it's logical for it to require the [] like the others.

Bye,
bearophile

Reply via email to