Реализация неизменяемого и специализированного вектора фиксированного размера

Для производительности и безопасности я хотел бы реализовать вектор фиксированного-размера, который был бы неизменяемым и специализированным (Мне нужна быстрая арифметика)]. Моей первой идеей было использовать аннотацию @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.

Могу ли я еще что-то сделать, чтобы достичь своей цели?

12
задан Charles 2 November 2012 в 16:39
поделиться