Наиболее интересное сравнение, вероятно, между этими двумя случаями:
Случай A: занимает 86 мс
time("forEach") {
var sum = 0
arr.forEach { sum += it }
sum
}
Случай B: занимает 294 мс
time("range forEach") {
var sum = 0
(0 until n).forEach { sum += arr[it] }
sum
}
В то время как случай A вызывает IntArray.forEach(...)
, случай B вызывает Iterable<T>.forEach(...)
- это два разных вызова.
Я думаю, компилятор Kotlin знает, как оптимизировать IntArray.forEach(...)
, но не Iterable<T>.forEach(...)
.