Dla wydajności i bezpieczeństwa chciałbym zaimplementować wektor o stałym rozmiarze, który jest niezmienny i wyspecjalizowany (potrzebuję szybkiej arytmetyki). Moim pierwszym pomysłem było użycie adnotacji @specialized
(ponieważ potrzebuję zarówno liczb całkowitych, jak i liczb rzeczywistych).Implementacja stałego rozmiaru, niezmiennego i wyspecjalizowanego wektora
Oto pierwsza próba:
package so
class Vec[@specialized A] private[so] (ary: Array[A]) {
def apply(i: Int) = ary(i)
}
Jednak, kiedy analiza uzyskanego kodu bajtowego z javap
, widzę, że elementy są nadal zapakowane. Na przykład:
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
Wygląda tablice nie są wyspecjalizowane, które wydaje się głupie, ponieważ tablice są wyspecjalizowane na JVM.
Czy jest coś, co mogę jeszcze zrobić, aby osiągnąć mój cel?
Jaką wersję używasz? Dla mnie wygląda dobrze z 2.9.2. –
Próbowałem z wersjami 2.9.2 i 2.8.2. – paradigmatic