【发布时间】:2012-04-21 09:28:25
【问题描述】:
为了性能和安全,我想实现一个固定大小的向量,它既不可变又专门化(我需要快速算术)。我的第一个想法是使用@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 上的。
我还能做些什么来达到我的目标吗?
【问题讨论】:
-
你用的是什么版本? 2.9.2 对我来说看起来不错。
-
我尝试了 2.9.2 和 2.8.2。
标签: scala autoboxing specialized-annotation