История изменений
Исправление firkax, (текущая версия) :
Вобщем, так и быть, я посмотрел источники откуда это всё взялось. Так вот, повторю в очередной раз, ты не прав.
Первоисточник этой идеи тут: https://web.archive.org/web/20180716171336/http://www.fortran.com/fortran/com...
Во-первых, там речь про фортран. Метки в нём не глобальные, как ты пытался заявить.
Во-вторых, работает он именно так, как писал я, за одним исключением. Там действительно может быть сопутствующий if, но этот if, так же как и comefrom, НЕ выполняется в той строчке где он написан. Выполняется он в строчке той метки, которая аргумент comefrom, и при успехе делается goto.
Опустив неудобный фортрановский синтаксис, ситуация такая:
50: qwe
..............
if(i==1) comefrom 50
asd
qwe
if(i==1) goto 50a
..............
50a: asd
Comefrom это не «установить хук когда код дойдёт до comefrom», это именно «указание компилятору вставить goto, возможно условное, в нужную строчку». Условное тут - goto, а не его вставка. Вставка делается всегда.
А реализация на ruby не соответствует спецификации. Соответствующую спецификации сделать, наверно, невозможно.
В-третьих, там в конце («box 2») прямым текстом говорится что это аналог цикла с меткой на конце, про который я выше писал, а этот самый цикл с меткой широко использовался фортран-программистами десятилетиями и ничего странного они в нём не видели.
Исправление firkax, :
Вобщем, так и быть, я посмотрел источники откуда это всё взялось. Так вот, повторю в очередной раз, ты не прав.
Первоисточник этой идеи тут: https://web.archive.org/web/20180716171336/http://www.fortran.com/fortran/com...
Во-первых, там речь про фортран. Метки в нём не глобальные, как ты пытался заявить.
Во-вторых, работает он именно так, как писал я, за одним исключением. Там действительно может быть сопутствующий if, но этот if, так же как и comefrom, НЕ выполняется в той строчке где он написан. Выполняется он в строчке той метки, которая аргумент comefrom, и при успехе делается goto.
Опустив неудобный фортрановский синтаксис, ситуация такая:
50: qwe
..............
if(i==1) comefrom 50
asd
qwe
if(i==1) goto 50a
..............
50a: asd
Comefrom это не «установить хук когда код дойдёт до comefrom», это именно «указание компилятору вставить goto, возможно условное, в нужную строчку». Условное тут - goto, а не его вставка. Вставка делается всегда.
В-третьих, там в конце («box 2») прямым текстом говорится что это аналог цикла с меткой на конце, про который я выше писал, а этот самый цикл с меткой широко использовался фортран-программистами десятилетиями и ничего странного они в нём не видели.
Исправление firkax, :
Вобщем, так и быть, я посмотрел источники откуда это всё взялось. Так вот, повторю в очередной раз, ты не прав.
Первоисточник этой идеи тут: https://web.archive.org/web/20180716171336/http://www.fortran.com/fortran/com...
Во-первых, там речь про фортран. Метки в нём не глобальные, как ты вы пытался заявить.
Во-вторых, работает он именно так, как писал я, за одним исключением. Там действительно может быть сопутствующий if, но этот if, так же как и comefrom, НЕ выполняется в той строчке где он написан. Выполняется он в строчке той метки, которая аргумент comefrom, и при успехе делается goto.
Опустив неудобный фортрановский синтаксис, ситуация такая:
50: qwe
..............
if(i==1) comefrom 50
asd
qwe
if(i==1) goto 50a
..............
50a: asd
Comefrom это не «установить хук когда код дойдёт до comefrom», это именно «указание компилятору вставить goto, возможно условное, в нужную строчку». Условное тут - goto, а не его вставка. Вставка делается всегда.
В-третьих, там в конце («box 2») прямым текстом говорится что это аналог цикла с меткой на конце, про который я выше писал, а этот самый цикл с меткой широко использовался фортран-программистами десятилетиями и ничего странного они в нём не видели.
Исправление firkax, :
Вобщем, так и быть, я посмотрел источники откуда это всё взялось. Так вот, повторю в очередной раз, ты не прав.
Первоисточник этой идеи тут: https://web.archive.org/web/20180716171336/http://www.fortran.com/fortran/com...
Во-первых, там речь про фортран. Метки в нём не глобальные, как ты вы пытался заявить.
Во-вторых, работает он именно так, как писал я, за одним исключением. Там действительно может быть сопутствующий if, но этот if, так же как и comefrom, НЕ выполняется в той строчке где он написан. Выполняется он в строчке той метки, которая аргумент comefrom, и при успехе делается goto.
Опустив неудобный фортрановский синтаксис, ситуация такая:
50: qwe
..............
if(i==1) comefrom 50
asd
qwe
if(i==1) goto 50a
..............
50a: asd
Comefrom это не «установить хук когда код дойдёт до comefrom», это именно «указание компилятору вставить goto, возможно условное, в нужную строчку». Условное тут - goto, а не его вставка. Вставка делается всегда.
В-третьих, там в конце прямым текстом говорится что это аналог цикла с меткой на конце, про который я выше писал, а этот самый цикл с меткой широко использовался фортран-программистами десятилетиями и ничего странного они в нём не видели.
Исходная версия firkax, :
Вобщем, так и быть, я посмотрел источники откуда это всё взялось. Так вот, повторю в очередной раз, ты не прав.
Первоисточник этой идеи тут: https://web.archive.org/web/20180716171336/http://www.fortran.com/fortran/com...
Во-первых, там речь про фортран. Метки в нём не глобальные, как ты вы пытался заявить.
Во-вторых, работает он именно так, как писал я, за одним исключением. Там действительно может быть сопутствующий if, но этот if, так же как и comefrom, НЕ выполняется в той строчке где он написан. Выполняется он в строчке той метки, которая аргумент comefrom, и при успехе делается goto.
Опустив неудобный фортрановский синтаксис, ситуация такая:
50: qwe
..............
if(i==1) comefrom 50
asd
qwe
if(i==1) goto 50a
..............
50a: asd
Comefrom это не «установить хук когда код дойдёт до comefrom», это именно «указание компилятору вставить goto, возможно условное, в нужную строчку». Условное тут - goto, а не его вставка. Вставка делается всегда.