On 06/24/2013 03:12 PM, bearophile wrote:

> Ali Çehreli:
>
>> So, the following two have the same effect:
>>
>>     vector = vec.vector[0..dimension];
>>
>>     vector[] = vec.vector[0..dimension];
>
> The first syntax will be deprecated and later it will become an error.

I am confused. Even if the right-hand expression were a fixed-length array? If so, then we wouldn't speak of their being value types. (?)

    a = b;    // should be fine

Otherwise, fixed-length arrays would become weird types that cannot be used in assignment operations.

I just read the change log. Either it is incorrect or the change is implemented inccorrectly because it is supposed to be about the right-hand side. So, OP's code is correct after all.

Here is the excerpt from the change log:

<excerpt>
Array copy operations now always require using the slice syntax:

The right-hand-side of an array copy operation now requires using the slice syntax:

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

    x[] = z;    // copies z (pointer + length) 2 times to x
    y[] = z;    // copies each element of z into y (compiler emits warning)
}

If the user intended to write such code they must use the slice syntax for both the source and target arrays:

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

    y[] = z[];  // copies each element of z into y (no warnings)
}

Rationale:

The compiler will emit a warning to make the user aware that the copy operation is arbitrarily expensive.
</excerpt>

Ali

Reply via email to