LINUX.ORG.RU

goto в shell

 


0

1

Линус Товальдс, тащемта, вот что писал про goto: «I think goto's are fine, and they are often more readable than large amounts of indentation. That's _especially_ true if the code flow isn't actually naturally indented (in this case it is, so I don't think using goto is in any way _clearer_ than not, but in general goto's can be quite good for readability). Of course, in stupid languages like Pascal, where labels cannot be descriptive, goto's can be bad. But that's not the fault of the goto, that's the braindamage of the language designer.»

Хороший, годный оператор. Почему же в shell его не запилили в явном виде? Как имитировать goto в шелле наиболее прозрачным образом, чтобы не плодить процессы, не засирать стек и прочее?



Последнее исправление: phill (всего исправлений: 1)
Ответ на: комментарий от anonymous

Многозначительное «не только». А что еще? Сам контекст?

да, сам контекст. Функция работает в своём контексте. Даже в bash'е (мало того, я это использую IRL для написания рекурсивных функций. А разбирать итеративно рекурсивное дерево каталогов — это идиотизм).

emulek
()
Ответ на: комментарий от arturpub

Ну так шелл и не такой мощный, док

мощность твоего шелла определяется только твоими знаниями. И ничем более.

гоуту запилить не смогли

потому что он не нужен и избыточен в шелле.

не то что комефром со стеком.

есть там и стек и контекст, и локальные ассоциативные массивы.

emulek
()
Ответ на: комментарий от arturpub

Почему же в shell его не запилили в явном виде?

что тебе непонятно? Ответ: НЕ НУЖЕН.

Почему не нужен тебе понятно?

emulek
()
Ответ на: комментарий от arturpub

Я уже не первый год на этом форуме и конечно же знаю основную причину непринятия патчей в апстрим.

но до сих пор ты не понял той простой вещи, что это — годная причина.

Как думаешь, почему не запилят патч в калькулятор, который делит на ноль?

Алсо в маздае — запилили.

emulek
()
Ответ на: комментарий от emulek

Угу. Щас все на этом помешались, только юзают не прямо, а через лупы. У веблалок даже континауций нет в их недоязычке, а они все асинхронку мутят.

arturpub ★★
()
Ответ на: комментарий от emulek

это ВОЙТИ проще. А ВЫЙТИ?

Написал же, заменяет break

ФУНКЦИЯ ЗАМЕНЯЕТ ВСЁ!

Ну так нет там функций, как таковых. Есть метки на которые можно перейти или вызвать. По сути та же функция, которая принимает аргументы, все это делается через вызов call и управляющих сносок goto. В PowerShell функции в полном объеме, и как следствие ненужность goto. Например:

@echo off

for /l %%i in (0,1,10) do call:1 %%i
goto:eof

:1
echo %1
function echo ($num) { $num }
0..10 | % { echo $_ }
TGZ ★★★★
()
Ответ на: комментарий от arturpub

Кстати всегда было интересно что ты думаешь будет поделить на ноль?

делить на ноль НЕ НУЖНО.

сколько повторять-то?

emulek
()
Ответ на: комментарий от TGZ

Написал же, заменяет break

зачем заменять break, если есть break?

Ну так нет там функций, как таковых. Есть метки на которые можно перейти или вызвать. По сути та же функция, которая принимает аргументы, все это делается через вызов call и управляющих сносок goto

какое-то дерьмо непонятное.

emulek
()
Ответ на: комментарий от arturpub

Любому здравомыслящему человеку очевидно: будет столько же, сколько на 1. Но маразм математики не позволяет, да. Проблема в математике, а не в делении на 0.

anonymous
()
Ответ на: комментарий от anonymous

делить на ноль НЕ НУЖНО.

сколько повторять-то? А все таки? Ты не уходи от вопроса!

за деньги я тебе напишу программу СБИШ, дающую годный результат. Уточни ТЗ и перечисли аванс.

emulek
()
Ответ на: комментарий от anonymous

Пять делить на ноль будет пять. Домножим уравнение на ноль. Пять равно ноль. Значит, делить на ноль и делить на один не равно.

arturpub ★★
()
Ответ на: комментарий от arturpub

Это может тебе не нужно, а мы тут уже вовсю делим, если ты не еще заметил. Вот я и спрашиваю, как правильно.

А какова цена вопроса?

emulek
()
Ответ на: комментарий от anonymous

Но маразм математики не позволяет, да.

это у математиков маразм. У программистов всё хорошо. Никто не запрещает тебе написать программу, которая делит на ноль. Мало того, за твои деньги её любой программист для тебя напишет.

emulek
()
Ответ на: комментарий от emulek

Я уже запутался с этими вашими делениями, не могу точно сказать. Вроде как ноль или один. Ты расскажи, я перечислю.

arturpub ★★
()
Ответ на: комментарий от anonymous

Зачем нужен break, если есть православный GOTO?

break мощнее и логичнее. А твоё goto — это лишняя сущность, т.к. требует меток. Метки нужны были разве что в 70х годах прошлого века, их давно уже никто не использует.

emulek
()
Ответ на: комментарий от emulek

зачем заменять break, если есть break?

Где есть, а где и нет, принимай правила игры, или играй в другую игру. Это называется выбор под себя.

какое-то дерьмо непонятное.

Это синтаксис, батяня, если знаешь его, то и затруднений нет. Так можно сказать, что и ассемблер дерьмо и немецкий язык, а о фонетическом вьетнамском я вообще промолчу.

TGZ ★★★★
()
Ответ на: комментарий от emulek

Лишняя сущность — это костыли при двухуровневом брейке, а также костыли со спецвозвратом для брейка из callee. Критикуя таки предлагай.

arturpub ★★
()
Ответ на: комментарий от arturpub

Пять делить на ноль будет пять. Домножим уравнение на ноль. Пять равно ноль. Значит, делить на ноль и делить на один не равно.

да. И что?

5/0=☣
☣*0=5
1/0=☣
☣*0=1
☣!=☣
где ты видишь противоречие?

emulek
()
Ответ на: комментарий от arturpub

Я уже запутался с этими вашими делениями, не могу точно сказать. Вроде как ноль или один. Ты расскажи, я перечислю.

что тебе рассказать-то?

emulek
()
Ответ на: комментарий от emulek

Значит если по новой зайти в цепь рассуждений, то 5/0!=☣. И вывод окажется снова неверен.

Подожди-ка! Значит делить на ноль будет нан?

arturpub ★★
()
Ответ на: комментарий от TGZ

Где есть, а где и нет, принимай правила игры, или играй в другую игру. Это называется выбор под себя.

почему ты считаешь правильным запиливать goto, и не правильным запиливать break?

Это синтаксис, батяня, если знаешь его, то и затруднений нет. Так можно сказать, что и ассемблер дерьмо и немецкий язык, а о фонетическом вьетнамском я вообще промолчу.

это дерьмо, а не синтаксис. Ассемблер намного логичнее. Про вьетнамский я не в курсе.

emulek
()
Ответ на: комментарий от emulek

Никто не запрещает тебе написать программу, которая делит на ноль.

Твоя программа, максимум, будет приводить 0 к единице. Это костыль, а не решение, и не отменяет того факта, что математика содержит глубочайшее противоречие. Нуля быть не должно. И твоя прога не будет работать корректно, если она будет пользоваться сущестующим мат аппаратом. Так что не трахай людям мозг.

anonymous
()
Ответ на: комментарий от arturpub

Лишняя сущность — это костыли при двухуровневом брейке, а также костыли со спецвозвратом для брейка из callee. Критикуя таки предлагай.

выход из вложенного цикла в принципе не получится без костылей. Костыль в виде break 2 намного логичнее, ибо не требует лишней сущности(метки), и избавляет от проблем, связанных с тем, что метка находится в другом контексте.

emulek
()
Ответ на: комментарий от emulek

Потому что goto prevails, а break is limited to scope. Ассемблер это чистое гоуту, особенно если понять, что call это push eip & mov eip, addr, а ret это add [esp], 5 & pop eip.

arturpub ★★
()
Ответ на: комментарий от emulek

IEEE 754-fix

5/0=☣
☣*0=5
1/0=☣
☣*0=1
☣!=☣
5/0=+Inf
+Inf*0=NaN
1/0=+Inf
+Inf*0=NaN
NaN!=NaN

Никаких противоречий, абсолютно всё по стандарту.

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.