Kotlin'直到'创建IntRange垃圾的乐趣

我正在使用until缀乐趣为我的循环下面

 for (x in 0 until bodies.size) bodies[x]() 

当用YourKit分析我的代码时,我注意到我有大量的IntRange对象(约2k /秒)。 在这里输入图像描述

当我切换循环使用int...int rangeTo直接它不会创建任何垃圾。

 for (x in 0..bodies.size-1) bodies[x]() 

有人可以解释这两者之间的区别吗? 从我可以告诉Int.until简单地返回this .. to

 public infix fun Int.until(to: Int): IntRange { val to_ = (to.toLong() - 1).toInt() if (to_ > to) throw IllegalArgumentException("The to argument value '$to' was too small.") return this .. to_ } 

在当前版本v1.0.4中,编译器优化了rangeTodownTo函数的调用,因为它们是for循环中最常见的。

我想他们会尽快进行优化。

这是相关的问题单: https : //youtrack.jetbrains.com/issue/KT-9900 。 随意投票。