【发布时间】:2011-12-13 22:44:08
【问题描述】:
使用scalacl plugin有什么缺点吗?
我打算在我的项目中使用 scala。 我在 scala 中写了一点代码来查看它的执行时间。
(1 to 1000000).map(1 + _).sum
1.没有插件
被编译成这样的:
BoxesRunTime.unboxToInt(((TraversableOnce)Predef..MODULE$.intWrapper(1).to(1000000).map(new MyScala..anonfun.1(), IndexedSeq..MODULE$.canBuildFrom())).sum(Numeric.IntIsIntegral..MODULE$));
并在大约 375 毫秒内运行
2。使用 scalacl 插件
int i = 1;
int j = 1000000;
int k = j;
int m = i;
for (VectorBuilder localVectorBuilder = new VectorBuilder(); m <= k;) {
int n = m;
localVectorBuilder.$plus$eq(BoxesRunTime.boxToInteger(1 + n));
m += 1;
}
int a = BoxesRunTime.unboxToInt(localVectorBuilder.result().sum(Numeric.IntIsIntegral..MODULE$));
259 毫秒
【问题讨论】:
-
30% 的提升并不多。我优化了我的代码的一部分,它现在使用数组和 while 循环,以实现 100 倍的加速。惯用的 Scala 可能真的很慢。例如,如果您摆脱拳击,那么您将获得更令人印象深刻的东西。
-
顺便说一句,
Range#sum现在在主干中进行了优化,并以恒定时间运行O(n),而不是线性O(n)。大多数情况下,算法改进是可取的。