Для производительности и безопасности я хотел бы реализовать вектор фиксированного-размера, который был бы неизменяемым и специализированным (Мне нужна быстрая арифметика)]. Моей первой идеей было использовать аннотацию @specialized
(, потому что мне нужны как целые, так и вещественные числа).
Вот первая попытка.:
package so
class Vec[@specialized A] private[so] ( ary: Array[A] ) {
def apply( i: Int ) = ary(i)
}
Однако, когда я анализирую полученный байт-код с помощью javap
, я вижу, что элементы по-прежнему упакованы. Например:
public double apply$mcD$sp(int);
Code:
0: aload_0
1: iload_1
2: invokevirtual #33; //Method apply:(I)Ljava/lang/Object;
5: invokestatic #83; //Method scala/runtime/BoxesRunTime.unboxToDouble:(Ljava/lang/Object;)D
8: dreturn
Похоже, что массивы не специализированы, что кажется глупым, потому что массивы специализированы на JVM.
Могу ли я еще что-то сделать, чтобы достичь своей цели?