Para el rendimiento y la seguridad, me gustaría implementar un vector de tamaño fijo que sea inmutable y especializado (necesito aritmética rápida). Mi primera idea fue usar la anotación @specialized
(porque necesito números enteros y reales).Implementación de un vector de tamaño fijo, inmutable y especializado
Aquí es un primer intento:
package so
class Vec[@specialized A] private[so] (ary: Array[A]) {
def apply(i: Int) = ary(i)
}
Sin embargo, cuando se analiza el código de bytes resultante con javap
, puedo ver que los elementos todavía están en caja. Por ejemplo:
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
Parece que las matrices no están especializados que parece tonto, porque las matrices están especializados en la JVM.
¿Hay algo que aún pueda hacer para alcanzar mi objetivo?
¿Qué versión estás usando? Me parece bien con 2.9.2. –
Intenté con ambos 2.9.2 y 2.8.2. – paradigmatic