Сколько информации разделяют переменные массива?

Сколько информации копируется/обменивается, когда я присваиваю одну переменную массива другой переменной массива?

int[] a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
int[] b = a;
a[0] = 42;
writefln("%s %s", a[0], b[0]);   // 42 42

Очевидно, a и b имеют одну и ту же полезную нагрузку, потому что 42 выводится дважды.

a ~= 10;
writefln("%s %s", a.length, b.length);   // 11 10

Добавление к a не изменяет b, так что длина, похоже, не является частью полезной нагрузки?

b = a;
a ~= 11;
b ~= 42;
writefln("%s %s", a[11], b[11]);   // 11 42

Может ли соответствующая реализация D также вывести 42 42? Может ли b ~= 42 перезаписать 11 внутри a?

Когда именно a и b отделяются друг от друга? Выполняет ли D какую-то COW в фоновом режиме?

5
задан fredoverflow 9 January 2012 в 15:42
поделиться