加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么Scala for循环比逻辑上相同的循环慢?

发布时间:2020-12-16 09:54:40 所属栏目:安全 来源:网络整理
导读:参见英文答案 Why are Scala “for loop comprehensions” so very slow compared to FOR loops?????????????????????????????????????1个 我喜欢Scala的强大功能以及它们与任何monadic类型与map和flatMap集成的方式.但是,我还想做一个简单的整数循环而不会
参见英文答案 > Why are Scala “for loop comprehensions” so very slow compared to FOR loops?????????????????????????????????????1个
我喜欢Scala的强大功能以及它们与任何monadic类型与map和flatMap集成的方式.但是,我还想做一个简单的整数循环而不会有很大的速度惩罚.为什么Scala没有以下两个逻辑上相同的循环以相似的运行时性能运行甚至编译成类似的字节代码?

// This is slow...
for (i <- 0 until n) println(s"for loop with $i")

// This runs much faster. It runs roughly at the same speed as Java code doing an identical while or for loop.
var i = 0;
while (i < n) {
  println(s"while loop with $i")
  i += 1
}

解决方法

他们不同的主要原因(但不仅仅是)是拳击.

在代码中:

for (i <- 0 until n) println(s"for loop with $i")

你将一个匿名函数println(s“for loop with $i”)传递给(i < - 0到n)的理解.它相当于:

(0 until n) foreach (i =>
  println(s"for loop with $i")
}

该函数在字节码中被删除,这意味着我不能是一个原始的int,它必须被装箱为Integer. Java没有Fixnum引用来避免这种成本,就像例如Smalltalk确实(特别令人沮丧的是,考虑到有多少旧的smalltalk!)

在某些情况下使用-optimize会有所帮助,特别是在scalac的主干版本中.

你也可以使用scalaxy/loops来加快速度:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读