для цикла: почему i медленнее, чем i = i 1 в swift

#performance #for-loop #swift #increment

#Производительность #для цикла #swift #увеличение

Вопрос:

это обычный пустой цикл с обычным оператором приращения «i «

 import Foundation

let start = CFAbsoluteTimeGetCurrent()

for var i = 0; i < 1000000; i   {

}

let timeTaken = CFAbsoluteTimeGetCurrent() - start

println(timeTaken) // 0.0229730010032654
  

но этот цикл с «i = i 1» намного быстрее

 import Foundation

let start = CFAbsoluteTimeGetCurrent()

for var i = 0; i < 1000000; i = i   1 {

}

let timeTaken = CFAbsoluteTimeGetCurrent() - start
println(timeTaken) // 0.00384700298309326
  

второй цикл в 5-6 раз быстрее

я понимаю, что swift все еще находится в бета-версии, и я не сравниваю его с другими языками, но для меня это не имеет смысла

Комментарии:

1. Как насчет предварительного увеличения? Это так же медленно?

2. Звучит интересно, но я жду, когда кто-нибудь воспроизведет результаты перед голосованием.

3. Такое измерение времени довольно нелепо. На вашем компьютере одновременно происходит множество событий. Вы включили оптимизацию? Вы выполняли свои измерения более одного раза?

4. @Ramon, с чего бы это? Этот вопрос не касается улучшения рабочего кода.

5. Не i = i 1 равно i , а не i ? Рекомендуется использовать i .

Ответ №1:

разве это не проблема оптимизатора? справедливый тестовый мир

 var i = 0
for j in 1..1000000 {
i  
}

var i = 0
for j in 1..1000000 {
i = i   1
}
  

Комментарии:

1. я просто хотел намекнуть на некоторые недостающие опции в цикле for, если вы используете i , а i = i 1 не в рамках ИНИЦИАЛИЗАЦИИ; УСЛОВИЕ; ИНКРЕМЕНТ / ДЕКРЕМЕНТ Части Lopp, разницы нет