OberonCore
https://forum.oberoncore.ru/

Цикл Дейкстры
https://forum.oberoncore.ru/viewtopic.php?f=30&t=1225
Страница 6 из 9

Автор:  Alexey_Donskoy [ Вторник, 18 Ноябрь, 2008 14:34 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Время разработчика и бонусы верифицируемости и безошибочности значительно дороже процессорного времени в подавляющем большинстве случаев. А там, где нужна жёсткая оптимизация - там она и нужна, задача такая ;)

Автор:  Info21 [ Вторник, 18 Ноябрь, 2008 17:04 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Alexey_Donskoy писал(а):
Время разработчика и бонусы верифицируемости и безошибочности значительно дороже процессорного времени в подавляющем большинстве случаев.

Речь о базовой технике.
С поставленной техникой задачи решаются быстрее и качественнее, и с меньшими затратами на "отладку" (а часто вообще без них).

Всех, кто спорит с циклом Дейкстры -- уволить с сей секунды.

Автор:  Info21 [ Вторник, 18 Ноябрь, 2008 17:14 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Edward Ivanov писал(а):
... Насколько быстродействущим является цикл Дейкстры? IMHO, стандартный цикл с двумя (тремя) for-ами (примеры выше) все таки будет пошустрее.

Отличия в быстродействии ничтожны, и интересны только во встроенных системах и т.п. (и то вряд ли).

Описываться в книгах и документации (комментариях) циклы должны по Дейкстре.
Отличия ради оптимизации -- оговариваться.

Автор:  Edward Ivanov [ Вторник, 18 Ноябрь, 2008 17:54 ]
Заголовок сообщения:  Re: Цикл Дейкстры

В исходниках ББ можно найти циклы Дейкстры?
Роясь в исходниках и подсистемах ББ, нашел, что довольно часто используются стандартные FOR..END.
Если следовать логике Info21, то разработчиков ББ надо разогнать в первую очередь. :oops:

Автор:  Илья Ермаков [ Вторник, 18 Ноябрь, 2008 18:06 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Не забывайте, что в Обероне из FOR не бывает досрочного выхода. Если используется FOR, то это действительно полный проход по индексам.

Цикл Дейкстры - не обязательное, а "всего лишь" очень удобное средство для грамотного программирования (метода Дейкстры). Можно обойтись простым WHILE, просто часто будет погромздчее.

Автор:  Info21 [ Вторник, 18 Ноябрь, 2008 18:46 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Edward Ivanov писал(а):
В исходниках ББ можно найти циклы Дейкстры?
Роясь в исходниках и подсистемах ББ, нашел, что довольно часто используются стандартные FOR..END.
Если следовать логике Info21, то разработчиков ББ надо разогнать в первую очередь. :oops:

Если следовать моей логике, то такого вывода из такой посылки никак не выходит.

Автор:  PGR [ Вторник, 18 Ноябрь, 2008 19:30 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Edward Ivanov писал(а):
В исходниках ББ можно найти циклы Дейкстры?
Можно, например в исходниках компилятора. В виде такой конструкции:
Код:
LOOP
  IF ... THEN ...
  ELSEIF ... THEN ...
  ELSE EXIT END;
END;

Автор:  Wlad [ Вторник, 18 Ноябрь, 2008 21:43 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Иван Кузьмицкий писал(а):
Владимир Лось писал(а):
Код:
foreach( ItemType item in items )
Код:
for( int i = 0; i<items.count; ++i )

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

Во-во, стиль... Я столько раз по невнимательности (мысли о задаче, а не её написании в виде кода) делал разного рода ошибки во втором варианте, что сейчас уже просто ("по всеобщности") только foreach пользую. Вплоть до объявления реализации енумерэйтед-интерфейса в моих нестандартных коллекциях... Особенно часто ошибки были, когда вложенные циклы. Ну вот такой я "вертлявый", скорее к результату стремлюсь... Таки почему ж это мне лишними будут средства языка, которые мне напоминать и по рукам линейкой бить, в случае моих "зевков".
Дисциплина - гуд, но формальных средств-стражников-надсмотрщиков (на любом уровне конструкций) это - пустое сотрясение громким воздуха неприличным звуком...
В случае оберонов, Вирту следовало бы, наряду с исключением FOR-а, FOREACH-то внести в язык... Этим бы он, как раз, и реализовал бы законченный баланс минимализма с полезностями и вкусностями в области циклических конструкций...

Автор:  Vlad [ Четверг, 15 Январь, 2009 19:19 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Info21 писал(а):
Я не спрашивал, поняли ли вы там что-то. Докажите, что добросовестно прочли.


Я читал Гриса. Вот вам мое честное слово. До Дейкстры не дошел, потому что по моим нынешним представлениям там я найду тоже, что и у Гриса (можете меня переубедить), но менее популяризированное и более углубленное. Эта книга для меня опоздала, ничего нового я в ней не нашел. Ее полезно прочесть в ВУЗ'е, особенно для математических специальностей. Для нематематических (тем паче гуманитарных) можно подобрать более удобоваримую литературу (мне так кажется, я не знаю реального положения дел), потому что для людей без математического склада ума книга Гриса бесполезна.

А вот вы, например, читали какую-нибудь "DDD"?

P.S. Глава про документирование у Гриса вообще безнадежно устарела. Глава про обращение программ (нигде такого не видел) выглядит как абстрактные математические игры (на самом деле пратический смысл есть, но почему-то никак не упомянут).

Автор:  Vlad [ Четверг, 15 Январь, 2009 19:33 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Info21 писал(а):
Речь о базовой технике.


Речь о читабельности. Цикл дейкстры нормально не читается (во всяком случае в существующих ЯП). Вы можете сколько угодно рассуждать о его математической элегантности, но в коде он выглядит ужасно. Это значит, что даже если вам его удалось правильно закодировать на конкретном ЯП, ваш последователь (или даже вы сами) будет долго думать, что за фигня здесь написана, неправильно поймет и внесет ошибку.

Info21 писал(а):
Всех, кто спорит с циклом Дейкстры -- уволить с сей секунды.


Сначала займите соответствующую должность :)

P.S. Ваш любимый Грис, кстати, упоминает о различиях между математикой и кодом.

Автор:  Info21 [ Четверг, 15 Январь, 2009 20:06 ]
Заголовок сообщения:  Re: Цикл Дейкстры

(*цикл Дейкстры*)
LOOP IF ... THEN
...
ELSIF ... THEN
...
ELSE EXIT END END;

Ну, и чего тут нечитабельного?

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

Автор:  PGR [ Четверг, 15 Январь, 2009 21:22 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Info21 писал(а):
Ну, и чего тут нечитабельного?

Если это читабельно, зачем было усложнять седьмой Оберон новой конструкцией?

Автор:  Comdiv [ Четверг, 15 Январь, 2009 21:26 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Очевидно, чтобы избавиться от цикла LOOP.

Автор:  PGR [ Четверг, 15 Январь, 2009 21:56 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Да, совсем забыл о том, что O7 выбросили LOOP. Тогда вопрос снимается :)

Автор:  Илья Ермаков [ Среда, 21 Январь, 2009 01:02 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Случайно в Яндексе всплыл текст С. Губанова о докладе Вирта в Нижнем Новгороде - и в нём абзац про тогдашнее отношение Вирта и Гуткнехта к циклу Дейкстры:

http://www.oberon2005.ru/r260905.html
Цитата:
Другой молодой человек задал вопрос о работе Дейкстры, в которой предлагались инструкции циклов с несколькими точками входа или что-то в этом роде. Вопрос был задан на русском, и переводчику понадобилось много времени, чтобы Вирт понял о чем речь. Наконец, Вирт догадался, о какой работе Дейкстры идет речь, и ответил (насколько я помню), что это всё дело легче просто заменить цепочкой инструкций if-then-end. И тут произошло чудо — неожиданно Гуткнехт проснулся!!! Юрий Эрнстович [псевдоним Юрга Гуткнехта в кругах российского Оберон-сообщества — прим. ред.] попросил, чтобы ему тоже разрешили ответить на этот вопрос. И что-то долго и активно рассказывал. Честно говоря, я не очень понял, но вроде речь шла о том, что нужно сделать так, как проще, а у Дейкстры сложновато.

Автор:  Wlad [ Среда, 21 Январь, 2009 01:16 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Илья Ермаков писал(а):
http://www.oberon2005.ru/r260905.html ... Вирт догадался, о какой работе Дейкстры идет речь, и ответил (насколько я помню), что это всё дело легче просто заменить цепочкой инструкций if-then-end. ... нужно сделать так, как проще, а у Дейкстры сложновато.

С одной стороны, множить запись ELSIF в WHILE - несколько сбивает с толку: можно когда-нибудь СЕРЬЁЗНО наколоться: перепутаешь к чему,собственно ELSIF этот относится: к WHILE или IF. С другой стороны, Запись IF ??? THEN EXIT END ну просто показывает, что тут к чему... Да и просто IF ??? THEN DOSomething() END в заблуд не вводит, хоть в циклической конструкции, хоть - нет...

Автор:  Илья Ермаков [ Среда, 21 Январь, 2009 01:28 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Цикл Дейкстры выражает наиболее общий случай алгоритмического процесса с обратной связью....
Поэтому хорошо его иметь явно. Это ведь не частный паттерн.

Автор:  Wlad [ Среда, 21 Январь, 2009 12:03 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Илья Ермаков писал(а):
Цикл Дейкстры выражает наиболее общий случай алгоритмического процесса с обратной связью....
Поэтому хорошо его иметь явно. Это ведь не частный паттерн.

Я - не про то! (Хотя, слова какие-то подозрительны: "хорошо бы его иметь"... :) )
Я про то, что в случае "навороченности кода", можно перепутать альтернативные ветки цикла и условия... А - это уже серьёзный потенциальный источник проблем...
Надо или слово вводить или (что мне больше по душе) - оставаться в рамках LOOP и вложенных условий...

Автор:  Info21 [ Среда, 21 Январь, 2009 19:29 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Владимир Лось писал(а):
Надо или слово вводить ...
Какое слово-то? В таких случаях бывает с ума можно сойти, слово подыскивая. А потом объяснять...

Автор:  Wlad [ Четверг, 22 Январь, 2009 12:09 ]
Заголовок сообщения:  Re: Цикл Дейкстры

Info21 писал(а):
Владимир Лось писал(а):
Надо или слово вводить ...
Какое слово-то? В таких случаях бывает с ума можно сойти, слово подыскивая. А потом объяснять...

А Вы - на русском и без нецензурщины!... :)
А, если сурьёзно, - я ж пишу: можно и LOOP-м с вложенными IF-ами прекрасно обойтись!

Страница 6 из 9 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/