Почему в Project Valhalla не представлены изменяемые структуры?JAVA

Программисты JAVA общаются здесь
Anonymous
Почему в Project Valhalla не представлены изменяемые структуры?

Сообщение Anonymous »

Мне кажется, что примитивные классы могли бы вести себя более эффективно (при разумных размерах), если бы они не были неизменяемыми, как предлагается сейчас, а работали бы больше как структуры C.
Учитывая этот примитивный класс

Код: Выделить всё

primitive class Point implements Shape {
public long x;
public long y;

public Point(long x, long y) {
this.x = x;
this.y = y;
}

public boolean contains(Point p) {
return equals(p);
}
}

interface Shape {
boolean contains(Point p);
}
И массив Point[]points = new Point[N];
Почему мы не сможем это сделать ?

Код: Выделить всё

points[0].x = 42;      //lastore
points[1].x++;         //laload, iinc, lastore

Point p = points[2];   //laload, laload
Shape s = p;           //new Point.ref (boxing)
p.x++;                 //iinc
assert !s.contains(p);
Вместо этого создается впечатление, что текущий дизайн предполагает, что вся точка будет прочитана, изменена с помощью withfield и записана обратно целиком, что кажется расточительным, особенно для больших типов. Или компиляторы будут регулярно применять здесь исключение копирования?
Обратите внимание, что Point должен быть сглаженным, а не сглаживаемым, чтобы пользователь мог быть уверен, что он не будет сглаживаться. изменить общий экземпляр.
Может ли кто-нибудь дополнительно разъяснить причину неизменности примитивных типов?
@see
< ul>
[*]JEP 401: Примитивные классы (предварительная версия)
[*]Государство Валгалла – Часть 3: Модель JVM


Подробнее здесь: https://stackoverflow.com/questions/733 ... le-structs

Вернуться в «JAVA»