Недавно я писал кое-что по данной теме по разным веткам:

> -- Цитата:
> Есть случаи, когда наиболее адекватная и вполне аккуратная структура программы потребовала бы для своей непосредственной текстовой записи goto с правилами "переход только ниже по тексту" и "входить внутрь цикла нельзя". Т.е. соответсвие дагу (в безциклическом случае) или сводимому графу (в циклическом случае). Вместо линейно-блочных графов в случае жёсткого "структурного". Графически это выражается без проблем, в тексте - проблемы...Какие-то окультуренные средства можно было бы ввести разом и для автоматных случаев, и для таких. Но это так, пофантазировать на досуге, пока что...От наличия goto в текущих условиях может быть только один вред. Хотя... Шут знает. Я знаю ряд людей, которые принципиально не используют break и continue (в Дельфи), гордятся "структурным программированием", но при этом клепают вместо break булевские переменные, а о правильном построении циклов не имеют ни малейшего представления.

> -- Цитата:
> Моё мнение - современники Дейкстры были правы в максиме "долой GOTO".Это сейчас хорошо эдак порассуждать "а вот тут, а вот так, а вот особые случаи, а вот ничего страшного нет".Но задумайтесь над разницей в ситуации - когда в те годы большинство программистов вообще кроме таких переходов ничего не использовало.И перейти на новый уровень развития можно было только "на отрицании". Чтобы возвести стену между поколениями программистов и подходов - и чтобы старый неуправляемый стиль не "всасывался с молоком", сразу отрабатывался жёстким "иммунитетом". Иначе так бы и писали...Ну а после утверждения отрицания можно заняться и синтезом, почему бы и нет. Посмотреть, а где максима плохо работает, где можно предложить расширения и т.п.Это нормальный и оптимальный путь НТР.Ведь сейчас вы не найдёте среди даже "быдлокодеров" кого-нибудь, кто напишет "макаронную программу". Им уже практически неоткуда "всосать" такой стиль. Поэтому даже наличие-отсутствие GOTO уже совершенно некритично, а может быть в некоторой форме даже полезно, особенно в системных языках. В форме "переход только вперёд, не внутрь вложенных конструкций". Важно отсутствие break-continue, потому что следующий этап развития - выкурить это "циклоклепание".

> -- Цитата:
> Возможно.Но если всё-таки понимать алгоритм как граф (не любой, конечно, но некоторой топологии), независимо от его текстовой формы представления, то как-то странно, по большому счёту, его специально искажать для втискивания в линейно-блочную структуру.Возьмите самый обычный ациклический алгоритм. Пусть его граф - ДАГ (= ориентированный ациклический, как граф импорта). Что в этом ДАГе плохого или неясного, с точки зрения восприятия программы или понимания её свойств? Почему всё-таки необходимо наворачивать дублирование, дополнительные переменные и проч., только лишь чтобы сделать алгоритм удобным для записи линейно-структурным текстом?Это размышления "по самому общему счёту".Разумеется, для дня сегодняшнего и его реалий я могу найти кучу аргументов за то, чтобы укладываться в классические структурные конструкции.