Прошло еще немного времени. Довелось пообсуждать goto в проф. сообществе.
Удивительный парадокс заключается в том что все против goto но на поверку никто не знает почему вообще goto запрещался.
Одни мифы и легенды.
Обычный ответ на просьбу объяснить что не так с goto: "Слышал где-то от кого-то что это плохо и программы становятся запутанными."
В общем я пришел к выводу.... все, что мы тут обсуждали, просто не актуально.
Если показываешь человеку то, что говорил Дейкстра - реакция типа такой: "что это за хрень?"
Ну а положа руку на сердце:
http://hosting.vspu.ac.ru/~chul/dijkstra/goto/goto.htmРазве это не хрень? Если бы я не знал подоплеки, то не понял бы в этой статье ни слова. Шизофазия какая-то.
И ведь "Дисциплина" тоже далеко не легкое чтение. Там очень своеобразная подача. Сильно далекая от того, что понятно современному программисту. И ссылаться на эту литературу просто неприлично. Это китайская грамота.
И я думаю что даже "перевод" книги на более понятный язык не поможет.
Контекст сейчас не тот. Программера во всю используют прерывания/продолжения циклов и в принципе легко обосновывают почему.
И я сам в какой-то момент забил. Мне понятно, им понятно. Проблемы то нет. Ошибки мы делаем ведрами, но совсем не в циклах.
Размышляя над тем, как мне обосновывают нужность этих самых бряков... я понимаю что опытные программера в общем то мыслят формализмом "формализм loop + exit", даже не зная о нем. Да и сам я его легко воспринимаю.
Тут есть тонкость, что это зависит от опыта кодера. Начинающий скорее всего напишет непонятную лапшу. А опытный расставляет бряки так, что общая логика вполне ясна. И на поверку этот опытный программер скорее всего легко перепишет это без бряков.
А вот начинающий пишет непонятную хрень в любом случае. Хоть с бряками, хоть без.
Получается как бы что "разруха в головах", а бряк вообще ни при чем.
Но меня больше всего озадачило то, что эти же программера категорически против goto.
И тут я задумался, а ведь Дейкстра существовал в совершенно другой реальности.
Вы только вдумайтесь, 1968 год! Да человечество в целом еще только начинало осваивать программирование.
Алгол появился всего за 10 лет до этого. Еще не были наработаны практики. Программирование было в самом начале пути.
Никто нифига не понимал. Конечно программеры писали с goto, так как тупо негде было узнать как писать.
Не у кого подсмотреть, перенять опыт. Да это даже было до интернета. Сейчас просто невозможно представить себе ту реальность.
Статья Дейкстры просто не могла не появиться.
Ну а что сейчас? Ситуация совершенно другая. У человечества уже нехилый такой опыт.
И бряки в циклах оказались вполне практичными. Да и в целом культурный goto все используют и проблем не испытывают.
Те, кто категорически против goto, на поверку настоящий goto то и не видели ни разу в коде. Или уже забыли что он позволял.
Ну а дальше внезапный вывод. Вот мы тут обсуждали годами что писать да как. Как вывернуться чтобы было без goto, но при этом красиво.
Выдумывали формализмы и конструкции чтобы было удобно, но без goto.
А по факту я внезапно осознал, что идеалом для меня был бы Oberon 07 + goto.
Это решение совершенно всех проблем и к языку в плане структур управления ничего добавлять больше не надо.
Не нужны ни бряки ни контины, ни циклы дейкстры, ни циклы пауки.
goto - это то самое make it simple.
Я осознал что именно хотел донести до нас Роберту, когда неожиданно для всех добавил goto в Lua.
Это же идеальная минималистичная фича языка для опытного программиста.
goto конечно имеется ввиду культурный. Ну т.е. без прыжков внутрь циклов и подобного.
И, следите за руками: Для обучения мы можем превратить язык в структурный, просто запретив обучаемым всего один оператор.
Вот такое вот грехопадение.
ps Хоспади, какие ужасные тексты я пишу. Меня тоже тошнит, мужики.