OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 12:17

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




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

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Валерий Лаптев писал(а):
Madzi писал(а):

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

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


Что именно неверно? Проверяемые исключения поддерживают известные ошибки, а непроверяемые - любые, даже те, которые ошибками небыли на момент создания программы (типа Runtime Error 200 в Borland Pascal). Я думаю что вы самостоятельно способны узнать всё об исключениях, задействовав интернет (о том как появились, какими были, зачем и т.п.). Вот вам ссылочка для затравки
Код:
http://dic.academic.ru/dic.nsf/ruwiki/75519


А потом уже обсудим (в другой теме).


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

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Madzi писал(а):
По локальным переменным - да, безопасно. Вот только не всегда процедуры работают с локальными переменными, иногда они изменяют переменные модуля или "родительской" процедуры.
Другими словами, использование RETURN усугубляет зло, создаваемое побочным эффектом процедур.


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

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Игорь Лоскутов писал(а):
Madzi писал(а):
По локальным переменным - да, безопасно. Вот только не всегда процедуры работают с локальными переменными, иногда они изменяют переменные модуля или "родительской" процедуры.
Другими словами, использование RETURN усугубляет зло, создаваемое побочным эффектом процедур.


Мне бы хотелось разделить понятие процедуры на два (по способу применения):
1. Процедуры
2. Подпрограммы

Подпрограмма - участок кода, вынесенный в отдельное место, в виду частой повторяемости в тексте:
Код:
call xxx
       ...
xxx: ...
       ret

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

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

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

В любом случае и процедуры и программы - крайне полезный инструментарий для "свёртки" сложных систем и, соответственно, повышения уровня читаемости, поэтому говорить о них как о зле я бы не стал.
Поскольку ФУНКЦИИ в Обероне были убраны, а единственный способ возврата параметров процедуры - это RETURN, то никуда от него не деться. В Обероне-07, совершенно справедливо сделано, что RETURN должен быть "приклеен" к концу процедуры и может быть только один.


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

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Madzi писал(а):
Мне бы хотелось разделить понятие процедуры на два (по способу применения):
1. Процедуры
2. Подпрограммы
Я бы не советовал Вам это делать. По той простой причине, что процедура и подпрограмма -- это суть одно и то же. Никакой разницы между ними нет. Исторически термин "подпрограмма" появился раньше (помните фортрановское SUBROUTINE ?), но потом, видимо в свете развития модульных систем, практически повсеместно был вытеснен термином "процедура" как более корректным. И действительно, ведь программа теперь -- это набор модулей (пакетов, библиотек, классов (в Яве) и т.д.). Что тогда должен обозначать термин "подпрограмма" -- поднабор модулей, что-ли? Лично я термин "подпрограмма" стараюсь не использовать.
По способу применения отличаются только "обычные процедуры" (proper procedure) и процедуры-функции.
Madzi писал(а):
В любом случае и процедуры и программы - крайне полезный инструментарий для "свёртки" сложных систем и, соответственно, повышения уровня читаемости, поэтому говорить о них как о зле я бы не стал.
Я говороил о том, что зло создаётся побочным эффектом, а не самими процедурами. Будьте, пожалуйста, повнимательнее :wink:
Имхо, в обычных процедурах побочный эффект не несёт в себе никакого зла, и даже наоборот, бывает очень полезен :) А вот процедурам-функциям я бы с удовольствием предал более математический смысл, вообще запретив использовать в них глобальные переменные, заодно раз и навсегда покончив с пресловутым побочным эффектом. Удивляюсь, что Никлаус Вирт этого не сделал.


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

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Я рад, что вы меня поняли (по поводу подпрограмм), естественно я не предлагаю вводить (вернуть) терминологию, но отметить две разные сущности (кстати говоря под подпрограмму идеально ложиться понятие inline процедуры, правда там подпрограмму стараются "вернуть на место" для скорости, вместо того чтобы пользоваться "процедурным эффектом свёртки" для объёма.

На счёт процедур-функций - не всё так определённо, как хотелось бы. Я бы с удовольствием придал более математический смысл не только им, но и некоторым другим сущностям.


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

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Madzi писал(а):
На счёт процедур-функций - не всё так определённо, как хотелось бы. Я бы с удовольствием придал более математический смысл не только им, но и некоторым другим сущностям.
Прозвучало несколько туманно, а жаль, очень любопытно.
Логика моих рассуждений проста. Функция используется только в выражениях (хотя бы состоящих из одного единственного операнда -- самой функции). Ещё Никлаус Вирт, по-моему, говаривал: "Функция -- это значение, которое надо вычислить". Судя по Вашим постам на форуме, Вы должны разделять мою точку зрения, что во время таких вычислений не должно производиться никаких шаманских действий с переменными, не имеющими отношения к этим вычислениям. Возможно, я не прав насчёт Вашего мнения. Хотелось бы тогда простенький пример, когда "не всё так определённо".


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

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Игорь Лоскутов писал(а):
Madzi писал(а):
На счёт процедур-функций - не всё так определённо, как хотелось бы. Я бы с удовольствием придал более математический смысл не только им, но и некоторым другим сущностям.
Прозвучало несколько туманно, а жаль, очень любопытно.
Логика моих рассуждений проста. Функция используется только в выражениях (хотя бы состоящих из одного единственного операнда -- самой функции). Ещё Никлаус Вирт, по-моему, говаривал: "Функция -- это значение, которое надо вычислить". Судя по Вашим постам на форуме, Вы должны разделять мою точку зрения, что во время таких вычислений не должно производиться никаких шаманских действий с переменными, не имеющими отношения к этим вычислениям. Возможно, я не прав насчёт Вашего мнения. Хотелось бы тогда простенький пример, когда "не всё так определённо".

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


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

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Madzi писал(а):
Я разделяю точку зрения о ...
Я оказался прав :D


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

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


Ну если рассматривать FOR исключительно в применении к существующему описанию языка оберон - то да, вы не поверите, но я соглашусь :) На фоне возможности ручного изменения переменной цикла, ее отдельном объявлении и практической применимости только к массивам - да, он как мертвому припарка :) Убрать FOR, и добавить FOREACH с возможностью итерировать списки (по полю next). Проку будет намного больше. Впрочем если просто убрать - то тоже язык не много потеряет.


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

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


За использование глобальных переменных в условии цикла надо руки отрывать сразу, особенно студентам :)


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

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Vlad писал(а):
За использование глобальных переменных в условии цикла надо руки отрывать сразу, особенно студентам :)
К сожалению, правилами языка (КП) это не запрещено. Я имею в виду, конечно же, использование переменных, а не отрывание рук :)
Хотя явного запрета на отрывание рук студентам в сообщении о КП тоже нет :lol:


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

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
Vlad писал(а):
За использование глобальных переменных в условии цикла надо руки отрывать сразу, особенно студентам

А если это какая-то переменная, которая устанавливается один раз и только во время инициализации программы? Кстати, видел в языке MATLAB довольно удачную находку: для доступа к любой глобальной переменной её нужно дополнительно объявлять в начале функции с помощью оператора global. Интересно, есть ли что-то подобное в других языках?

Vlad писал(а):
Убрать FOR, и добавить FOREACH с возможностью итерировать списки (по полю next). Проку будет намного больше. Впрочем если просто убрать - то тоже язык не много потеряет.

Иногда неструктурное программирование здорово упрощает жизнь, например, при выходе из глубоко вложенного цикла при поиске элементов или при ошибке. Я не уверен, что чисто структурный вариант будет всегда читаться лучше, чем с обработчиком исключений, break, continue, goto или даже LOOP...END. Например, у Кернигана и Ритчи использование goto строго не рекомендуется, но есть примеры, когда он удачен (которые довольно редки на практике).


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

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

Эх, вспоминаются слова Ершова: "Я мечтаю об учебном курсе с каторжным тренингом на доказательное построение алгоритмов, в стиле лучших учебников матанализа". И трепать, трепать студиозусов, пока во сне не будет отлетать :)


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
ScrollLock писал(а):
А если это какая-то переменная, которая устанавливается один раз и только во время инициализации программы? Кстати, видел в языке MATLAB довольно удачную находку: для доступа к любой глобальной переменной её нужно дополнительно объявлять в начале функции с помощью оператора global. Интересно, есть ли что-то подобное в других языках?

В PHP. Но в сочетании с автообъявлением переменных - это звездец... забудешь объявить как глобал, так она автоматом создастся локально - и ошибку искать полчаса... Если пишешь редко на языке, то обычно забываешь. Пример идиотского комбинирования фишек - добавили вроде хорошее (борьба с побочными эффектами), но в сочетании с другим - задница вышла...

Цитата:
Иногда неструктурное программирование здорово упрощает жизнь,
...
но есть примеры, когда он удачен (которые довольно редки на практике).

Как же так? Довольно редки, но упрощает здорово? :) Не режет слух? :)


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Оффтоп: читаю описание PHP. Как они там живут? Похоже спят и ждут, когда приснится новая фича, какую бы можно было включить... Например:
Цитата:
Замечание: Несмотря на то, что оператор ! имеет более высокий приоритет чем =, PHP позволяет использовать следующую конструкцию: if (!$a = foo()), которая присваивает переменной $a результат выполнения функции foo().


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

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


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

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


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

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