LINUX.ORG.RU
ФорумTalks

52 года назад вышла статья Эдсгера Дейкстры против оператора GOTO

 ,


1

1

Собственно, сабж.

Кстати, оригинальный заголовок был «A Case Against the Goto Statemen», а на получивший известность «GOTO considered harmful» его заменил Никлаус Вирт - автор языка программирования Паскаль, который тогда был ещё и редактором журнала «Communications of the ACM», в котором и было опубликовано письмо Эдсгера Дейкстры.

★★★★★
Ответ на: комментарий от Bad_ptr

потому что твоё объяснение говно

Ты видел код Qt? там каждый чих обёрнут в функцию. Это и есть правильная декомпозиция кода, которая даёт больше возможностей и исключает возникновение необходимости оператора GOTO.

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

Да ради бога, нравится тебе писать без готу — пиши, никто тебя насильно не заставляет вовсюда пихать готу.

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

Да ну что за бред? Ты видел код ядра? Там половина функций с goto в конце не от того, что каждый кусок не обернут в функцию, а от того, что КАЖДАЯ ошибка должна сопровождаться клинапом (явным). Поэтому GOTO остался нужен только в C, где нету RAII или подсчета ссылок, как в Perl/Rust.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 2)
Ответ на: комментарий от Bad_ptr

Дурак невежественный, так структурное программирование появилось.

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

Да ну что за бред?
Язык программирования для человеков
остался нужен только в C

В ассемблере он тоже нужен, как я уже писал. Сам говорил про «языки для человеков» и тут же полез к менее высокоуровневому языку...

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

На C актуального софта просто дохренища. На ASM не осталось ничего.

kirk_johnson ★☆
()

Слабая статья. Надо было сразу выступать против инструкции процессора JMP.

Shadow ★★★★★
()
Ответ на: комментарий от no-such-file

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

Ага, GO TO (Assigned) и GO TO (Computed) позволяли магам-фортранщикам так колдовать по-чёрному, что аж жуть :)

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

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

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

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

usecase для goto в Python

Ой, да вся та же обработка ошибок. Простой пример. У тебя есть функция которая делает 10 каких-то операций и после каждой нужно в случае ошибки:

  1. Вывести (I)gnore, (R)etry, (A)bort
  2. Если выбрано I, то продолжить со следующей операции
  3. Если выбрано R, то повторить предыдущую операцию
  4. Если выбрано A, то перейти в начало программы

Ты можешь оформить вывод IRA и ввод ответа в виде функции, но тебе всё равно нужно будет вставлять switch/case после каждой операции. А теперь представь, что вариантов не 3 а 100500. Поэтому в Си лепят на это ещё и макросы ибо руками копипастить совсем уныло.

Реальное решение проблемы есть в CL с его рестартами.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Эм… я могу просто сделать список из действий и один forloop. Даже в C могу. Причем чем больше действий, тем читаемее вариант со списком.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 2)
Ответ на: комментарий от saahriktu

При злоупотреблении он превращает код в лапшу.

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

ya-betmen ★★★★★
()
Ответ на: комментарий от no-such-file

Ты только что изобрёл goto поверх виртуальной машины из «списка функций».

Я только что изобрел человеческий способ решить задачу без пердолинга с goto. Меня пипец забавляют клоуны, которые начинают все сводить к low-level. Прикинь, на самом деле все конструкции сводятся к add/sub и jmp. Дальше-то что, лол.

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

Как я понимаю, ты предлагаешь оформить каждую операцию функцией, запихать их в список и сделать цикл по списку. Ок. Ты сделал виртуальную машину, командами которой являются эти функции, список - памятью, а переменная цикла - счётчиком команд. После каждой команды ты проверяешь флаг и делаешь соответствующее обновление счётчика команд, т.е. тот самый goto, только уже в контексте своей виртуальной машины. На самом деле смешно, что ради этого пришлось столько городить.

no-such-file ★★★★★
()
Ответ на: комментарий от kirk_johnson

бенчмарки в студию, что GOTO дает какие-то действительно заметные преимущества

В питоне насколько знаю, создание/убивание переменных внутри цикла добавляют дофига ко времени исполнения

С готу тебе не нужно убивать созданные переменные

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

Прикинь, на самом деле все конструкции сводятся к add/sub и jmp

Ты просил показать тебе пример задачи. Я показал тебе такой пример, ради которого тебе пришлось изобретать goto. Ещё вопросы будут?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Я всегда знал, что системное программирование калечит мозг.

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

Уже не очень, честно говоря, понимаю, куда питон нужен, поесле добавления модулей в Go.

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

это не значит, что весь-весь движок и тем более браузер на нём

Весь движок (Servo) на Rust. Весь firefox на смеси плюсов и Rust.

kirk_johnson ★☆
()

Как популярность может превратить обычный механизм в идиому ненависти.

  • goto хороший и порой незаменимый, автор фанатик, толпа утята.

А по дури можно switch N+1 вложенности делать так что goto цветочком покажется аленьким.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Ему по сути сказали

Если твой высер был сутью, то я - английская королева.

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

Конкретный вопрос задан. Ты обосрался ответить на него и тем самым доказал, что твой наезд на паскаль это не более чем трындеж. Как говорится, трындеть – не мешки ворочать.

Поставил тебе метку «балабол».

Reset ★★★★★
()
Последнее исправление: Reset (всего исправлений: 2)

Потомки не оценили и придумали Python.

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

CSS парсилка какая-то говорят. Ну это прям да, великая победа.

Вообще-то, да.

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

Зато ты ни одного шанса показать себя дебилом не упускаешь.

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

и кроме всех, где нужно писать код, во втором

лол, и ведь не поспоришь!

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

Кто про рипгреп знает кроме маленькой прослойки маминых хакиров, которые ковыряются в вим вместо того чтобы использовать нормальные ИДЕ?

В том же vscode ripgrep используется для поиска по проекту. А сейчас это самый популярный инструмент для кодинга. Но ты продолжай хейтить.

Vovka-Korovka ★★★★★
()
Ответ на: комментарий от Iron_Bug

это параноидный ООП. перегружает проц вызовом ненужных мелких процедур на каждый пук.

Возможно поэтому Qt и считается тормозной либой, но с ней мне проще работать, чем с Delphi, где половина простым присвоением можно в переменную записывать, а где функцией. В Qt же всё чётко, на каждую переменную в объектах свой set() и get().

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

В Delphi никто не запрещает делать свои обёртки *_set() и *_get().

saahriktu ★★★★★
() автор топика

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

Tark ★★
()

А почему Dijkstra произносится не как Дийкстра?

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