パフォーマンスと安全性のために、不変で特殊化された固定サイズのベクトルを実装したいと思います (高速演算が必要です)。私の最初のアイデアは、@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で特殊化されているため、配列は特殊化されていないように見えますが、これはばかげているようです。
目標を達成するためにまだできることはありますか?