They still both dont do the same thing which isnt really a fair comparison IMO :P
alias wtest5 {
var %ticks = $ticks,%i = 0,%flag = 1
while ((%i != 90000) && (%flag)) {
if (%i == 49999) %flag = 0
inc %i
}
return wtest5: %i $calc(($ticks - %ticks)/1000) flag: %flag
}
alias gtest3 {
var %ticks = $ticks,%i = 0,%flag = 1
:start
if (%i <= 90000) {
inc %i
if (%i == 50000) {
%flag = 0
goto end
}
goto start
}
:end
return gtest3: %i $calc(($ticks - %ticks)/1000) flag: %flag
}
wtest5: 50000 2.384 flag: 0 gtest3: 50000 2.353 flag: 0
wtest5: 50000 2.383 flag: 0 gtest3: 50000 2.364 flag: 0
wtest5: 50000 2.393 flag: 0 gtest3: 50000 2.354 flag: 0
Result is the same though goto is faster in this situation but only because of a crappy break out method in the while which doesn't really prove goto is better in this situation since while and /break is still faster.
concidering this slightly modified wtest3
alias wtest3 {
var %ticks = $ticks,%i = 0,%flag = 1
while (%i != 90000) {
if (%i == 50000) {
%flag = 0
break
}
inc %i
}
return wtest3: %i $calc(($ticks - %ticks)/1000) flag: %flag
}
wtest3: 50000 2.203 flag: 0 gtest3: 50000 2.363 flag: 0
wtest3: 50000 2.193 flag: 0 gtest3: 50000 2.334 flag: 0
wtest3: 50000 2.213 flag: 0 gtest3: 50000 2.354 flag: 0
To me, this disproves your hypothesis:
The place where I believed gotos were better than while loops are when you need to break out of the loop somewhere in the middle (wtest2 and wtest3 versus gtest1).