OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 12 Август, 2020 01:04

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




Начать новую тему Ответить на тему  [ Сообщений: 135 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 07 Апрель, 2009 21:48 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1047
Откуда: Россия, Чебоксары
Илья Ермаков писал(а):
Ну, напишите раздельно присваивание начального значения, а границы выделите шрифтом в исходнике.
Ну шуток только не надо, ладно?
Вот почему как один аспект - так и теория, и структурность, и всё ясно сразу;
а как другой - так шутки!
Отчего шутки? Оттого, что серьёзно лень думать, накатанная колея есть! У сторонников IT-мэйнстрима - одна, у сторонников структурного программирования - другая. Но - колея!

А задачи-то разные!
И суть их, и модель - разные!

Илья Ермаков писал(а):
конструкции соответствуют математическому пониманию алгоритмов...
Вот FOR и соответствует математическому пониманию алгоритма - выборка диапазона индексов!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 21:51 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9271
Откуда: Россия, Орёл
Почему шутка?? Как раз в тему эргономики. Использование шрифтового выделения. В ББ применяется часто.

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

Чтобы подчеркнуть границы, можно явно написать их обе в условии:
WHILE (beg <= i) & (i <= end) & ... DO


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 21:54 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1047
Откуда: Россия, Чебоксары
Повторяю: задачи-то разные!
И суть их, и модель - разные!

Илья Ермаков писал(а):
конструкции соответствуют математическому пониманию алгоритмов...
Вот FOR и соответствует задаче, модели и математическому пониманию алгоритма - выборка диапазона индексов!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Руки прочь от FOR (и от WHILE тоже)!
СообщениеДобавлено: Вторник, 07 Апрель, 2009 22:54 

Зарегистрирован: Вторник, 27 Ноябрь, 2007 20:40
Сообщения: 48
Илья Ермаков писал(а):
Касательно Вирта - хоть бы думали, прежде чем писать. 55 лет - молодой? С 5 языками за спиной - тем более. Именно потому цикла FOR в Виртовском Обероне как раз НЕТ.

Дональд Кнут выполнял работу по собиранию и упорядочиванию коллекции алгоритмов. Какое это отношение имеет к вопросу обоснования программирования, которым занимались другие учёные?
Просто Кнут на каждой уважающей себя полке таки стоит, а Дейкстра, к сожалению, нет. Не такая внушительная книжка - да и как-то гораздо меньше издавались.


- Ну, точнее, лет на ~20 моложе, чем сейчас
- Не было в Оберон? - Значит погорячился (по молодости) :roll: .
- В Оберон-2 и Оберон-07 цикл FOR есть (правда недоделанный, к сожалению).
- Можно писать математически правильные алгоритмы, имея GOTO, Break, Return...
- Занимались программированием одни учёные, обосновывали - другие, согласен.
- Дейкстра перегнул палку, породил много неудобств своей деятельностью, ИМХО.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Руки прочь от FOR (и от WHILE тоже)!
СообщениеДобавлено: Вторник, 07 Апрель, 2009 23:03 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8351
Откуда: Троицк, Москва
sia писал(а):
- Дейкстра перегнул палку, породил много неудобств своей деятельностью, ИМХО.
Совершенно очевидно, что Вы не понимаете ни цели, ни смысла, ни результатов деятельности Дейкстры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Руки прочь от FOR (и от WHILE тоже)!
СообщениеДобавлено: Вторник, 07 Апрель, 2009 23:12 

Зарегистрирован: Вторник, 27 Ноябрь, 2007 20:40
Сообщения: 48
Info21 писал(а):
sia писал(а):
- Дейкстра перегнул палку, породил много неудобств своей деятельностью, ИМХО.
Совершенно очевидно, что Вы не понимаете ни цели, ни смысла, ни результатов деятельности Дейкстры.


Позвольте с вами согласиться. Не понимаю ни цели, ни смысла деятельности Дейкстры.
Совершенно очевидно, языки ухудшились, программировать стало труднее.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Апрель, 2009 01:06 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Замечательно, все поняли, ИМХО хорошо известно. Оно аргументировано в рамках общепринятого в ИТ контекста понимания. И стиля составления алгоритмов.
Но речь о другой ситуации.


Да бросьте вы на "общепринятый ИТ" ссылаться. Я сейчас говорю исключительно за себя. И аргумент очень простой - читабельность. Ситуация все та же - есть код и надо понять, что он делает. Толку от того, что в случае WHILE у меня "целостный" предикат? Мне надо понять, что код делает, а не любоваться на этот предикат. И объединение в одну кучу итерирования и проверки на выход мне в этом никак не помогает, а наоборот.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Апрель, 2009 01:45 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 573
Откуда: Россия, Санкт-Петербург
Algo писал(а):
2 Madzi
Интересны (действительно интересны) Ваши рассуждения на счёт исключительных ситуаций.
Как вы предлагаете обрабатывать такие ситуации:
1. Процедуры вызывают друг друга: A->B-> ... Z. В Z возникает проблема, которую имеет смысл решать только в A, цепочку вызовов же следует просто прервать. Раздувать код проверками в каждой процедуре?

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

Я сейчас не помню точно кто это сказал (если нужно будет уточнить, то уточню, но кажется Дейкстра): "Если в программе возникает ошибка, то программа должна завершиться аварийно, даже если ошибка не существенная и программа могла бы продолжить работать. Программа с ошибкой - вещь не допустимая."


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Апрель, 2009 02:14 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Madzi писал(а):
Я сейчас не помню точно кто это сказал (если нужно будет уточнить, то уточню, но кажется Дейкстра): "Если в программе возникает ошибка, то программа должна завершиться аварийно, даже если ошибка не существенная и программа могла бы продолжить работать. Программа с ошибкой - вещь не допустимая."


Ох уж эти теоретики... Вам бы понравилось, если бы винда выключала комп на каждой ошибке? :) Или если BB схлопывался на первом же сработавшем ASSERT'e? :) Зависит от ситуации. И от того, что называть "программой" ;)

P.S. Кстати, так нелюбимые вами исключения позволяют замечательно разрулить такую ситуацию (в отличие от кошмарных кодов ошибок). А именно - отдать принятие решение о том "схлопываться" или "что-то сделать" тому, кто достаточно компетентен для этого.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Апрель, 2009 07:03 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 573
Откуда: Россия, Санкт-Петербург
Vlad писал(а):
Madzi писал(а):
Я сейчас не помню точно кто это сказал (если нужно будет уточнить, то уточню, но кажется Дейкстра): "Если в программе возникает ошибка, то программа должна завершиться аварийно, даже если ошибка не существенная и программа могла бы продолжить работать. Программа с ошибкой - вещь не допустимая."


Ох уж эти теоретики...

Что поделать. Без теории никому нельзя. Иначе будем постоянно ходить по граблям.

Vlad писал(а):
Вам бы понравилось, если бы винда выключала комп на каждой ошибке? :) Или если BB схлопывался на первом же сработавшем ASSERT'e? :) Зависит от ситуации. И от того, что называть "программой" ;)

Мне бы очень понравилось, потому что винду бы не смогли продать до тех пор пока не выловили и уничтожили большинство присутствующих в ней ошибок. Не понял вашу вторую часть, несмотря на смайлик. У вас "программой" что-то ещё называется?

Vlad писал(а):
P.S. Кстати, так нелюбимые вами исключения позволяют замечательно разрулить такую ситуацию (в отличие от кошмарных кодов ошибок). А именно - отдать принятие решение о том "схлопываться" или "что-то сделать" тому, кто достаточно компетентен для этого.

По этому поводу есть старая еврейская мудрость: "Не бывает безвыходных ситуаций, бывают ситуации в которые не попасть". Хорошая программа не будет обрабатывать коды ошибок, она просто не допустит ошибочной ситуации.

Не знаю, что вы имели ввиду отправляя меня в википедию http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B8%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B9
Википедия писал(а):
Обработка исключительных ситуаций (англ. exception handling) — механизм языков программирования, предназначенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении программы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма. В русском языке также применяется более короткая форма термина: «обработка исключений».

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

И ответная просьба - прочтите наконец Дейкстру и воздержитесь от написания сюда постов, если они прямо противоречат тому, о чём вы прочтёте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Апрель, 2009 07:32 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1047
Откуда: Россия, Чебоксары
Предлагаю в теме "О пользе всего сущего", или снова об исключениях без лишних слов привести пару учебных примеров, на которых показать пользу или вред исключений. А здесь закруглиться, всё-таки в теме FOR присутствует, а не исключения :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Апрель, 2009 08:48 

Зарегистрирован: Воскресенье, 08 Март, 2009 17:54
Сообщения: 372
Эта кровавая, беспощадная, бессмысленная и бесконечная война...
Есть мнение, что конструкции ЯП должны быть ортогональными, не синонимичными. В отличии от естественных языков.
Если в языке есть CONTINUE, тогда и WHILE и FOR могут зациклиться - ни какой ортогональности. Если есть BREAK, то FOR итерирует от a и НЕДАЛЕЕ чем до b. Случай достаточно своеобразный, достоин ли такой частный случай включения в язык?

Обероновцы, Дейкстровцы и принципиальные структурщики отвечают - нет. Практики, любители свободы выражения мысли, сторонники эклектики - отвечают да. Убедить противоположную сторону в своей правоте, по всей видимости, можно только проведя масштабный эксперимет и показав, что люди следующие такому-то принципу пишут быстрее, пишут более надёжные и стабильные программы, которые проще поддерживать. Но выполнить его практически не реально.

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

Но у обероновцев есть луч надежды. Дело в том, что обычно махровые практики не преподают, тем более в школе. Есть возможность перехватить инициативу и обучить младое поколение так как надо ;).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Руки прочь от FOR (и от WHILE тоже)!
СообщениеДобавлено: Среда, 08 Апрель, 2009 09:55 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
sia писал(а):
... Д.Кнут писал на асемблере, пользовал метки и "GOTO", и оттого его
алгоритмы не стали хуже. Структурность не догма, и думаю не стоит
размахивать ею как жупелом. Ну а истина скорее где-то посередине.
sia писал(а):
- Можно писать математически правильные алгоритмы, имея GOTO, Break, Return...
Важно понимать, что корень зла не в самом GOTO, а в том, как его использовать. Программист, который в детстве читал правильные книжки, может создавать структурные программы на любом императивном языке.

PS Как тут не вспомнить:
-- Что-то у меня программа не работает, вот глянь сырцы.
-- Так у тебя же ошибка!
-- Где? В программе?
-- Нет. В ДНК!

Что касается RETURN внутри цикла, то я вот о чём подумал. В отличие от Break и Continue, RETURN обеспечивает выход из текущего блока во внешний. Может поэтому Н. Вирт его оставил в языке? Ведь, если соблюдать правильный стиль, и не использовать безрассудно внутри процедуры глобальные переменные, то после выхода из процедуры по RETURN, уже не актульно выполнятся ли инвариант цикла (в котором стоит RETURN), так как область видимости данной процедуры становиться недоступной.
И всё же, высказанная мной мысль вызывает у меня сомнения. Интересно, что думают другие по этому поводу :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Апрель, 2009 10:30 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8351
Откуда: Троицк, Москва
Vlad писал(а):
Ох уж эти теоретики...
Ох уж эти рукосуи...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Руки прочь от FOR (и от WHILE тоже)!
СообщениеДобавлено: Среда, 08 Апрель, 2009 10:44 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1047
Откуда: Россия, Чебоксары
Игорь Лоскутов писал(а):
после выхода из процедуры по RETURN, уже не актульно выполнятся ли инвариант цикла (в котором стоит RETURN), так как область видимости данной процедуры становиться недоступной.
Согласен!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Апрель, 2009 10:55 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Мне кажется, что если отбросить субъективные предпочтения, можно выделить следующие моменты:
1. Вполне нормальное желание программиста (особенно начинающего) выделить безусловно понятную часть и "начать думать над непонятной", и FOR для этого как бы подходит.
2. Вполне "эргономичное" желание отделить тривиальную итерационную часть от "содержательной".

Ну а дальше? схема-то не универсальна, только для индексируемых последовательностей, для списков (или таблиц) все равно придеться использовать WHILE. И потом получается, что совершенно одинаковые по смыслу действия для массивов будем делать через FOR с ретоном, а для списков через WHILE. Мне это надо? Мне это не надо.
Выигрываешь в читабельности (допустим) маленького кусочка кода, зато проигрываешь в восприятии программы. И в голове каша, причем, что характерно, как у писателя, так и у читателя.

Один раз разобрался с WHILE и все, можно применять практически в любом месте, для любой последовательности, настоящий инвариант (и только чуть чуть останется для LOOP).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Апрель, 2009 12:03 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3191
Откуда: Астрахань
Madzi писал(а):

По поводу исключений скажу следующее: любое исключение это тот же самый GOTO на обработку ошибок (отложенная обработка). Появились исключения не от хорошей жизни, а от упавшего уровня программистов разработчиков, которые вместо грамотного построения программы "ловят" ошибки на выходе.
Рассмотрим пример:
try {
foo ();
} catch (Exception e) {
...
} // Java

Функция foo (); содержит (может содержать) ошибку, в результате которой возникает исключение.
Есть механизмы определить что это за ошибка (хотя можно привести пример, когда одна и та же ошибка может возникать в двух разных местах процедуры foo (); и требовать разной обработки). Несомненно, что исключения нужны для того, чтобы иметь возможность обработать ошибку. Этим занимается секция catch. В случае когда мы ЗНАЕМ какие ошибки могут возникнуть в foo ();, то мы МОЖЕМ написать адекватную процедуру обработки (но могут быть случаи, когда зная написать адекватную процедуру мы не можем (когда одна и та же ошибка может возникнуть в разных местах)). Если мы НЕ ЗНАЕМ какие ошибки могут возникнуть в foo (); (например библиотека стороннего разработчика и он открыл только часть исключений), то грамотно обработать ситуацию мы не можем.

Неверно!
Исключения поддерживают как раз ИЗВЕСТНЫЕ ошибки, проверяемые и запускаемые явным образом с помощью оператора throw. То есть, программист при реализации должен подумать, какие ошибки могут возникнуть, и что с этим делать.
А то, что вы описываете как НЕИЗВЕСТНЫЕ ошибки - это крах системы и посмертный дамп. Что мы наблюдаем в ББ для ЛЮБЫХ ошибок.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Руки прочь от FOR (и от WHILE тоже)!
СообщениеДобавлено: Среда, 08 Апрель, 2009 12:11 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Alexey_Donskoy писал(а):
Игорь Лоскутов писал(а):
после выхода из процедуры по RETURN, уже не актульно выполнятся ли инвариант цикла (в котором стоит RETURN), так как область видимости данной процедуры становиться недоступной.
Согласен!
Опять же оговорюсь, что если в условии цикла были использованы глобальные переменные, то они доступны и после выхода из процедуры, и актуальность, о которой я говорил, тогда остаётся.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Руки прочь от FOR (и от WHILE тоже)!
СообщениеДобавлено: Среда, 08 Апрель, 2009 13:05 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 573
Откуда: Россия, Санкт-Петербург
Игорь Лоскутов писал(а):
Что касается RETURN внутри цикла, то я вот о чём подумал. В отличие от Break и Continue, RETURN обеспечивает выход из текущего блока во внешний. Может поэтому Н. Вирт его оставил в языке? Ведь, если соблюдать правильный стиль, и не использовать безрассудно внутри процедуры глобальные переменные, то после выхода из процедуры по RETURN, уже не актульно выполнятся ли инвариант цикла (в котором стоит RETURN), так как область видимости данной процедуры становиться недоступной.
И всё же, высказанная мной мысль вызывает у меня сомнения. Интересно, что думают другие по этому поводу :)

Н.Вирт потом понял свою ошибку и убрал RETURN в конец процедуры и оставил только один (Oberon-07). Повторюсь ещё раз. Блок - один вход, один выход. В случае RETURN в цикле, то выходов из блока "процедура" как минимум 2, а это неправильно. По локальным переменным - да, безопасно. Вот только не всегда процедуры работают с локальными переменными, иногда они изменяют переменные модуля или "родительской" процедуры.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Апрель, 2009 13:15 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 573
Откуда: Россия, Санкт-Петербург
Axcel писал(а):
Мне кажется, что если отбросить субъективные предпочтения, можно выделить следующие моменты:
1. Вполне нормальное желание программиста (особенно начинающего) выделить безусловно понятную
часть и "начать думать над непонятной", и FOR для этого как бы подходит.

Такие желания нужно давить безжалостно. Путём рисования блок схем :) (с пол годика так...)

Axcel писал(а):
2. Вполне "эргономичное" желание отделить тривиальную итерационную часть от "содержательной".

А вот эти начинания - всячески поддерживать.

Axcel писал(а):
Ну а дальше? схема-то не универсальна, только для индексируемых последовательностей, для списков (или таблиц) все равно придеться использовать WHILE. И потом получается, что совершенно одинаковые по смыслу действия для массивов будем делать через FOR с ретоном, а для списков через WHILE. Мне это надо? Мне это не надо.
Выигрываешь в читабельности (допустим) маленького кусочка кода, зато проигрываешь в восприятии программы. И в голове каша, причем, что характерно, как у писателя, так и у читателя.

Универсальных схем нет. Иначе её давно бы уже все использовали.
Нужно понимать, что массивы - это структуры созданные под задачи линейной алгебры (вектора и матрицы) и цикл FOR, соответственно, ЗНАЧИТЕЛЬНО улучшает читабельность в этих задачах.
Не следует обижаться на микроскоп, что он плохо гвозди забивает.

Axcel писал(а):
Один раз разобрался с WHILE и все, можно применять практически в любом месте, для любой последовательности, настоящий инвариант (и только чуть чуть останется для LOOP).

;) в таком случае и неструктурный LOOP не нужен, потому что можно использовать заведомо истиное/ложное условие.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 135 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7  След.

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


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

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