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)
Ответ на: комментарий от TGZ

Ты же здесь усираешься, доказывая, что функция лучше

если нужна функция — нужна функция. А если ты вместо функции ставишь goto — ты быдлокодер. Если наоборот — тоже быдлокодер.

Вот и всё.

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

Вот и всё.

А если НЕТ функций? Или наоборот, нужен goto, а его нет? У тебя очень категоричные суждения, ты пойдешь пешком в гору, из-за того, что в автобусе все места заняты.

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

А если НЕТ функций?

не пиши программы на brainfuck, он для другого придуман.

Или наоборот, нужен goto, а его нет?

значит ты что-то делаешь не так, и плохо знаешь данный ЯП.

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

я подожду следующего автобуса.

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

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

Никто не предлагает все на нем строить в человек-ориентированных средах, но отсутствие оного в императивном языке, особенно при наличии и так нелокальных способов перехода — показатель упоротости автора, не более. Собсно мудак тот, кто думает что использовать костыли и ключевые слова не по месту это нормально.

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

Твой бреак 2 тихо и незаметно сломается при первом же рефакторинге. Если уж брекать, то именованный скоп. Языки, которые вводят скопинг, почему-то иногда не вводят их именование, хотя флоу завязан целиком на скопах, как на единицах управления оным. Что не нужно, так это ваши неявные номера скопов — от эта и правда самый идиотизм.

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

я подожду следующего автобуса

Смысл эффективного программирования — уехать на этом автобусе, но недосреды наверное могут позволить себе неторопливость и двухчасовые неудобства.

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

не пиши программы на brainfuck, он для другого придуман.

Какие еще программы? Прочитай название топика еще раз, сделай goto header. И не надо доказывать ненужность goto в bash, там все можно сделать и без этой инструкции. Или напиши Торвальдсу, что он не прав.

я подожду следующего автобуса.

Удачи, стой до завтра.

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

[goto] это дерьмо, а не синтаксис. Ассемблер намного логичнее

ассемблер это goto

Собсно вот.

Неа, вы про чо то, что я якобы не в курсе вещали, теперь будьте добры объясниться без мутных ходов.

не... Я про фразу «ассемблер это goto» в вашей цитате.

«Без мутных ходов»: ассемблер — не только goto(jmp). Мало того, обилие jmp использовалось для обфускации кода и защиты от его реинженеринга. Как раз потому, что хрен поймёшь код, который прыгает по памяти как блоха на сковороде. В нормальном коде как раз jmp довольно редко встречается само по себе, в 99.999% в составе вполне устойчивых конструкций составляющих циклы, ветвления и т.п. Как и в любом высокоуровневом ЯП.

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

Ты просто не понимаешь, что гоуту основополагающ

нет, это ты не понимаешь, что основопологающ MOV. И это твоё goto — тоже MOV.

так как суть флоу контрола в изменении позиции считывания этого флоу.

нет. Суть в выполнении, или НЕ выполнении.

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

не. Если у тебя строчки/операторы/команды УЖЕ пронумерованы, то конечно goto — самый простой вариант. Но кто тебе сказал, что эта нумерация обязательна? Сишечка например отлично работает без всяких меток, она имеет блочную структуру, потому goto там лишняя сущность(goto в сишечке нужна лишь для каких-то низкоуровневых конструкций, ну и для троллинга фанатегов конечно). А вот в bash'е так вообще никаких меток нет, там goto в принципе невозможно (разве что ввести специальный оператор «метка»)

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

Твой бреак 2 тихо и незаметно сломается при первом же рефакторинге.

ты упоролся? Goto ломается намного раньше. Причём поломка goto это ваще ППЦ, если ЯП с блочной структурой.

Языки, которые вводят скопинг, почему-то иногда не вводят их именование

дык а зачем? Что-бы goto работало хорошо, да?

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

Смысл эффективного программирования — уехать на этом автобусе, но недосреды наверное могут позволить себе неторопливость и двухчасовые неудобства.

лучше 5 минут подождать, а потом всю дорогу сидеть. А не ютиться у двери, зажатым как селёдка.

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

И не надо доказывать ненужность goto в bash, там все можно сделать и без этой инструкции

а в сишечке разве нельзя?

Или напиши Торвальдсу, что он не прав.

этот тролль сам об этом прекрасно знает. Как и я (:

Удачи, стой до завтра.

я читер. Уже ознакомился с расписанием (:

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

для троллинга фанатегов конечно

Или ненужнаторов :)

Еще раз. В нормальных языках скоп является единицей управления сам по себе. Его можно redo, last, next например, как и внешний, и еще более внешний. Миллионы мух пишут while (1), for(;;), i-=1, breakouter=1 и пирамиды фигурок, не понимая, что это и есть адский костыль. Не добавляя этого странно отрицать, что оно таки нужно.

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

Миллионы мух пишут while (1), for(;;), i-=1, breakouter=1 и пирамиды фигурок, не понимая, что это и есть адский костыль.

да пофиг. Главное — компилятор это понимает, и проставляет адекватные goto. Т.ч. эти костыли сегодня == вопрос стиля. Это как вопрос что правильнее: x = 1024*1024; или x = 1048576; Правильный ответ — монопенисуально.

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

Чтобы можно было управлять фловом без костылей. У меня был пример прототипного кода на перле, который при переводе на другой язык обрастал костылями и терял читаемость. Перл-код терял читаемость, do you believe? И там не было ни единого гоуту, т.к. у него есть вполне приятные синонимы, работающие на уровне скопа. Чистый гоуту кросс-скопный, и если есть управление скопами, то он и правда как бы не нужен, но это все равно что говорить, что еда не нужна, потому что есть борщ.

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

То то логистика всего мира пакует селедку в тугие банки, чтобы провести за раз через суэц.

ага. А я != селёдка.

И ещё раз — это проблема компилятора. А мне лишь-бы понятнее и читаемее. Если goto мешает понятности и читаемости — оно не нужно.

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

Перл-код терял читаемость, do you believe?

для меня перл-код никогда не потеряет читаемость. (:

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

Или наоборот, нужен goto, а его нет?

Да на кой ляд он нужен? Ёпвашуж… 4я страница ну приведи такой код где без goto ну просто никак нельзя.

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

Хз, но вдруг у кого-то фантазия работает иначе.

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

нет, это ты не понимаешь, что основопологающ MOV.
нет. Суть в выполнении, или НЕ выполнении.

нет. Если так смотреть, то основополагающ CMOV, и я везде подразумевал goto под if'ом, естественно. Хотя безусловный переход на низком уровне имеет место быть, и не так уж редко.

arturpub ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.