我在Scala 2.8.1标准库的源代码中搜索了@specialized
的使用。看起来只有少数特征和类使用此注释:Function0
、Function1
、Function2
、Tuple1
、 Tuple2
、Product1
、Product2
、AbstractFunction0
、AbstractFunction1
、AbstractFunction2
.
没有一个集合类是@specialized
。为什么不?这会生成太多类吗?
这意味着使用具有原始类型的集合类效率非常低,因为会发生大量不必要的装箱和拆箱。
拥有 Int
的不可变列表或序列(具有 IndexedSeq
特征),避免装箱和拆箱的最有效方法是什么?
最佳答案
特化对类(class)规模的成本很高,因此必须慎重考虑。在收藏的特殊情况下,我想影响将会是巨大的。
尽管如此,这是一项持续的努力——Scala 库才刚刚开始特化。
关于performance - 为什么 Scala 标准库中 @specialized 的东西这么少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5477675/