Все знают о письмах Дейкстры редактору: переходите к утверждению, которое считается вредным (также здесь .html transcripts и здесь .pdf), и с того времени был огромный толчок, чтобы по возможности отказаться от оператора goto. Хотя можно использовать goto для создания неуправляемого, растягивающегося кода, он, тем не менее, остается в современных языках программирования . Даже усовершенствованная структура управления продолжением в Схеме может быть описана как сложный переход.
Какие обстоятельства оправдывают использование goto? Когда лучше избегать?
В качестве дополнительного вопроса: C предоставляет пару функций setjmp и longjmp, которые обеспечивают возможность перехода не только в текущем кадре стека, но и в любом из вызывающих кадров. Должны ли они считаться такими же опасными, как goto? Более опасно?
Сам Дейкстра пожалел о том звании, за которое не нес ответственности. В конце EWD1308 (также здесь .pdf) он написал:
Наконец короткая история для записи. В 1968 году в сообщениях АСМ был опубликован мой текст под заголовком « Заявление Гото считалось вредным », на который в последующие годы чаще всего будут ссылаться, к сожалению, однако, часто авторы, которые видели его не больше, чем его title, который стал краеугольным камнем моей славы, став шаблоном: мы увидели бы все виды статей под заголовком «X считается вредным» практически для любого X, включая статью под названием «Дейкстра считается вредным». Но что случилось? Я представил документ под заголовком « Дело против заявления Гото»", который, чтобы ускорить его публикацию, редактор превратился в" письмо в редакцию ", и в процессе он дал ему новое название своего собственного изобретения! Редактором был Никлаус Вирт.
Хорошо продуманная классическая статья на эту тему, которую можно сравнить с темой Дейкстры, - « Структурное программирование с переходом к утверждениям» , написанная Дональдом Кнутом. Чтение обоих помогает восстановить контекст и недогматическое понимание предмета. В этой статье сообщается мнение Дейкстры по этому делу, и оно еще более убедительно:
Дональд Э. Кнут: Я полагаю, что, представляя такую точку зрения, я на самом деле не сильно не согласен с идеями Дейкстры, поскольку он недавно написал следующее: «Пожалуйста, не попадитесь в ловушку веры в то, что я ужасно догматичен перейти к утверждению]. У меня неприятное ощущение, что другие делают из этого религию, как будто концептуальные проблемы программирования могут быть решены одним трюком, простой формой дисциплины кодирования! "
goto
.