They still both dont do the same thing which isnt really a fair comparison IMO :P

Code:
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
}


Quote:

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
Code:
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
}


Quote:

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:
Quote:

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).




$maybe