OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 15 Июнь, 2025 13:07

Часовой пояс: UTC + 3 часа




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 18:18 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
Ярослав Романченко писал(а):
Геннадий Тышов писал(а):
Там пример для чего сгодился транслятор.
Если ещё и почитать, то всё выглядит ещё печальнее. Грустный у Вас какой-то транслятор.
Почему у вас грусть?

http://forum.oberoncore.ru/viewtopic.php?p=58238#p58238
efanov писал(а):
Цитата:
Сергей, хочу отметить ваш быстрый прогресс, от первого знакомства с идеями языка Дракон до инструментального его использования в практической деятельности.
Да мне кажется, что этот язык специально для меня придумали!
Вот efanov в восторге, восклицательный знак поставил.

Ярослав, могу помочь, ответить на вопросы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 18:30 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4722
Откуда: Россия, Орёл
Только не здесь, пожалуйста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Понедельник, 31 Январь, 2011 00:46 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Сергей Прохоренко писал(а):
Кстати, я не исключаю, что есть важные задачи, для которых пока нет адекватной заменяющей конструкции для goto. Тогда надо ее создавать, а не возвращаться к каменному топору.


Есть случаи, когда наиболее адекватная и вполне аккуратная структура программы потребовала бы для своей непосредственной текстовой записи goto с правилами "переход только ниже по тексту" и "входить внутрь цикла нельзя". Т.е. соответсвие дагу (в безциклическом случае) или сводимому графу (в циклическом случае). Вместо линейно-блочных графов в случае жёсткого "структурного". Графически это выражается без проблем, в тексте - проблемы...

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Понедельник, 31 Январь, 2011 05:25 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
http://karataev.nm.ru/goto.html
Цитата:
Про GOTO

Заметка для тех, кто знает, что такое оператор goto и особенно для тех, кто его переводит как "пошел на...".

Когда-то давно Эдгар Дейкстра (снимаю шляпу) написал статью про вредность goto. Авторитетный товарищ высказался об операторе goto в негативном ключе. Студенты же обычно еще с ветром в голове и любое радикальное замечание могут поднять на знамена, что собственно и произошло. И пошло - поехало. Присоединюсь к обсуждению, воспользовавшись свободой слова если не нарушать законы.

Все чаще со временем стал сталкиваться с правилами (внутрифирменными стандартами) кодирования, в которых было радикально черным цветом выведено: оператор goto запрещен. Сначала на это мало обращал внимание, думал что мало ли какая моча в голове у человека была, повзрослеет - одумается. Ан нет. Запрет на goto продолжает процветать. И меня это раздражает.

В чем, собственно, была суть статьи Дейкстры про goto? Он написал статью о том, что в его время (но это также применимо к любому времени), после набора молодых специалистов, может возникать проблема качества кода, и одна из сторон качества - читабельность другим сотрудником и модифицируемость кода другим сотрудником. Он указал, что по статистике на эту характеристику проекта влияет применение оператора goto. И что молодые специалисты, часто его употребляя, могут привести коды проекта в малопригодное состояние. В качестве одного из простых решений он принял решение отказаться от этого оператора.

Впоследствии (после его статистического анализа) было показано, что если в языке программирования присутствует некий набор общеалгоритмических конструкций, то оператор goto можно заменить на сочетание других операторов. Что собственно радикалы и подняли на знамена.

Впоследствии Дональд Кнут (снимаю шляпу дважды) также выпустил статью, показывающую, что есть конструкции управления выполнением программы, в которых замена оператора goto на посторонние конструкции вредна.

Мое личное мнение ближе к мнению Кнута и вообще никак не близко к мнению Дейкстры.

Оператор goto - это инструмент. Запрещать применение инструмента - это на мой взгляд нелепо, по меньшей мере. Проблемный? Может быть. Но на мой взгляд эта проблемность того же рода как проблемность со статистикой утечки памяти в программах работающих с указателями. "Если С++ работает с указателями и нам это непонятно, то мы им не будем пользоваться, тем более что в нем, говорят, утечки памяти тяжело обнаружить" - примерно такое мнение я уже не раз слышал. При этом глаза (к сожалению, только мои) сами собой делаются по пять копеек, ибо это глупость и нелепость. Если человек не умеет пользоваться инструментом - то надо просто научиться им пользоваться. Хорошая цитата из Алана Голуба: "Конструкторов спортивных велосипедов не волнуют проблемы детей, катающихся на трехколесных велосипедах".

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

В практике не раз встречал ситуации, когда, выполняя ТЗ, переводишь задание на язык программирования и пишешь оператор goto. После того как функция выполнена, возникает интерес проверить, можно ли и как именно заменить этот оператор на другие, сохранив корректность выполнения. Переделываешь. И что получаешь?

Получаешь вместо одного оператора с комментарием "почему он тут" нагромождение операторов в самых разных строках, введение, инициализацию, проверки и прочее дополнительной или не одной переменной. Код "украшается". И для чего? Попробуй прокомментировать каждый оператор и что получишь? В каждом комментарии для этих нелепостей написать "этим стулом мастер Гамбс заменяет оператор goto"?

Вместо понятного и элегантного применения goto там, где ему место, получить нагромождение сверху и снизу тучи кода, который его заменяет? Получили улучшение читабельности и модифицируемости? Ответ очевиден.

Оператор goto прост и эффективен. Почему мне не использовать простое и эффективное решение с переходом там, где мне понадобился именно переход?

Приходилось писать машины состояний (исполнения байткода), в которых основа машины исполнения - это тотальный switch, сотни три-четыре альтернатив перехода и часть альтернатив заканчивается или прерывается банальным goto. Ухмыляясь в виртуальные усы, мечтаю сунуть такие задачки какому-нибудь стороннику Дейкстры, чтобы он предложил замену без goto. И если не сможет улучшить - всыпать плетей. Должен же человек отвечать за базар, в конце концов. И очень жаль, что не могу всыпать. Недоработочка.

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

В конце сформулирую свою позицию так. Каждому инструменту - свое место. И если где-то должен стоять оператор goto, то именно он там и должен стоять. А не его суррогаты. Работать, в конце концов, придется твоей программе, а не мнению твоего руководителя.

Евгений Каратаев,

Можно прислушаться к Каратаеву и научится пользоваться инструментом, к своей же пользе.

Есть опасение, что на форуме, посвященном Оберону, запретят говорить о GOTO.
В лучшем случае, загонят в резервацию.
Как инквизиция в средние века, будут изгонять чертей-астрологов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Понедельник, 31 Январь, 2011 08:31 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Вот так и превращается демократия в дерьмократию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Понедельник, 31 Январь, 2011 09:30 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Геннадий Тышов писал(а):
...
Геннадий, если хотите конструктивного обсуждения, приводите код, а не беллетристику. Тогда будет, что обсуждать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Понедельник, 31 Январь, 2011 10:13 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Геннадий Тышов писал(а):
Можно прислушаться к Каратаеву и научится пользоваться инструментом, к своей же пользе.


Кто мешает учиться?
Кто мешает освоить базовейшую "пошаговую детализацию с уточнением" (см. старую-старую книгу Вирта "Систематическое программирование")?
Кто мешает разобраться с методами формального доказательства свойств программ, а если надо - подучить перед этим мат. логику? (у Гриса в учебнике есть даже и она).
Кто мешает в итоге получить понимание свойств программных конструкций?

И уже тогда аргументированно говорить о данной проблеме. О тех случаях, где структурного программирования недостаточно. Где нужно предлагать другие средства, goto - если хотите, но не тот "старый добрый goto".

Без наличия вышеперечисленных знаний говорить о goto что-то компетентное (и вообще понимать те реальные случаи, в которых он "был бы не лишним") невозможно.
Допускаю, что у Каратаева такие знания есть, хотя больше похоже только на несистематизированный опыт.
У тех, кто регулярно поднимает эту тему у нас на форуме, насколько я в курсе, таких знаний пока нет.
Но никто не мешает, наконец, их получить :) Книги легко достать электронно...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB