OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 19 Июнь, 2025 14:44

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




Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: ... the recommended style becomes predominantly functional.
СообщениеДобавлено: Вторник, 27 Май, 2008 15:16 

Зарегистрирован: Четверг, 25 Май, 2006 09:20
Сообщения: 42
Откуда: Королёв М. О.
Похоже. что эту статью никто не читал.

Вирт рекомендует функциональный стиль программирования.

On Programming Styles Niklaus Wirth, 24.3.2008 http://www.inf.ethz.ch/personal/wirth/Articles/Miscellaneous/Styles.pdf


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Май, 2008 15:22 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Здесь обсуждалось:
viewtopic.php?f=8&t=972&start=0


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 29 Май, 2008 19:51 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Илья Ермаков писал(а):
Здесь обсуждалось:
viewtopic.php?f=8&t=972&start=0
Обсуждать -- обсуждали.
Непонятно, к какому пришли выводу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 29 Май, 2008 22:46 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
AVC писал(а):
Непонятно, к какому пришли выводу.


В смысле? Одобрить рекомендацию Вирта или нет? 8)


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

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
AVC писал(а):
Непонятно, к какому пришли выводу.


В смысле? Одобрить рекомендацию Вирта или нет? 8)

А потом вызвать Вирта на товарищеский суд. В нашем ЖЭКе. :)

Просто хочется понять, что именно Вирт имел в виду.
Технически, он предлагает отказаться от использования контекста объемлющей процедуры. Это, похоже, он и называет predominantly functional style.
А я вот помню, как Метцелер (если не ошибаюсь, прямой начальник Александра Ильина) писал об удобстве вложенных процедур. Именно по причине разделяемого ими общего контекста.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 30 Май, 2008 09:09 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
AVC писал(а):
... Метцелер (если не ошибаюсь, прямой начальник Александра Ильина) писал ...

Лучшей рекомендации для Метцелера быть не может :-)

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

Иногда внутренние процедуры полезны, но это должно рассматриваться как исключение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 30 Май, 2008 21:01 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
Иногда внутренние процедуры полезны, но это должно рассматриваться как исключение.
Существуют разные причины вынесения кода в процедуры.
Самая простая (и, вероятно, исторически первая) из них -- избежать повторения одного и того же кода.
Если этот код повторяется в контексте одной (сложной) процедуры, то (IMHO) создание вложенной процедуры -- лучший выход. (Которого, кстати, лишены пишущие на Си.)
Я не думаю, что это такая уж редкая ситуация, чтобы называть ее исключением. :)

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 30 Май, 2008 23:52 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
AVC писал(а):
В чем отличие от "самостоятельных" процедур?
В том, что вложенные процедуры связаны с определенным (иногда отнюдь не маленьким) контекстом, который пришлось бы передавать через кучу параметров.

Видимо, info21 предлагает этот немалый контекст перетащить в глобальное пространство модуля... :о))


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Возможно, я сегодня чересчур мнительный-раздражительный...
Но я думаю, что Евгений прекрасно понимает суть вопроса. И тезис "разделяй и властвуй", который Info21 каждый день поминает, он тоже слышал. Так что "глобальные контексты" - какой-то плод остроумного воображения.


А посему позволю себе ЗАМЕЧАНИЕ ОТ МОДЕРАТОРА, за засорение тематического обсуждения бессмысленными остротами.


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 31 Май, 2008 01:09 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Илья Ермаков писал(а):
Возможно, я сегодня чересчур мнительный-раздражительный...
Но я думаю, что Евгений прекрасно понимает суть вопроса.
Евгений, возможно, и понимает.
А я, увы, не слишком понимаю то, что творится в последнее время. :(
Какой-то predominantly functional style. В Обероне-07 отказ от очевидно полезных конструкций (таких как цикл LOOP или указатели на массивы).
Вот я и проявляю беспокойство, пытаюсь разобраться в происходящем.


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

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
AVC писал(а):
Вот я и проявляю беспокойство, пытаюсь разобраться в происходящем.
Если нужен большой контекст, его имеет смысл облачить в RECORD и передавать указатель (VAR-параметр).
"Преимущественно функциональный стиль" позволяет, с одной стороны, исключить при написании подпрограммы вопрос "Куда поместить процедуру - локально или глобально?" и связанный с ним вопрос "А не может ли она в будущем пригодиться глобально?" С другой стороны, доступ к строго локальным объектам облегчает чтение процедур: все входные и выходные параметры явно перечислены, никаких побочных эффектов. Доступ к глобальным объектам, если его разумно ограничить, тоже не принесёт сюрпризов (я бы ввёл дополнительно список "импорта" глобальных переменных в процедуру). В этом случае каждая процедура текстом своего объявления являет практически полную спецификацию. Добавить автоматический анализ пред- и постусловий, и получим верифицирующий компилятор.

Удаление LOOP направлено на то же самое: повышение читабельности и верифицируемости. Это в Драконе на плоскости хорошо рисовать циклы с несколькими выходами, а при линейном чтении я всегда предпочитаю WHILE. Если нужно несколько выходов, то WHILE ~done.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 31 Май, 2008 09:54 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
А я так вапсче не понял о чём перетир... Вложенность/отсутствие таковой - лишь следствия наличия/отсутсвия тех или иных синтаксических приёмов привязки того, что умеет что-то делать с тем над чем это деланье надо призвесть... Другой вопрос - компенсируется ли лишний нагруз на нтеллехт программиста (в виде вороха синтаксическо-семантических языковых правил и конструкций) оперативностью реализации задумок программирующего и адекватно ли это построенным моделям?..............


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 31 Май, 2008 11:46 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Хорошо, хотя бы, что никто не взялся защищать исключение из языка указателей на массивы, возвращающее нас к временам критики Паскаля Керниганом и (IMHO) превращающее Оберон в непригодный для программирования язык.

Что касается исключения LOOP, то оно, по видимому, мотивировано (внезапно вспыхнувшим) желанием Вирта заменить все контекстные зависимости синтаксическими. Это не единственное подобное решение в Обероне-07. Другой пример: привязка (бывшего) оператора RETURN к окончанию функции. (Возможно, в "ту же степь" и predominantly functional style.)
Исключение LOOP Вирт пытался "подкрепить" введением цикла Дейкстры. Но, как говорится, "песок -- неважная замена овсу". Все приведенные примеры цикла Дейкстры не относятся к сфере применения исключенного оператора LOOP.


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Info21 писал(а):
Иногда внутренние процедуры полезны, но это должно рассматриваться как исключение.

В спешке не точно выражено.
Не исключение, а second choice.
По умолчанию -- first choice -- подпроцедура вынесена на уровень модуля, инфу получает через параметры.

Мой опыт в том, что это однозначно first choice.

Да, признаю, ситуация second choice случается не так редко.


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
AVC писал(а):
Что касается исключения LOOP ...

В лекции №8, которую я вывешивал, моё понимание проблемы полностью суммировано: вкратце: LOOP -- средство 1) моделирования цикла Дейкстры, 2) оптимизации.

Если в 1) нет нужды, то одно 2), возможно, и перестает быть достаточно весомым аргументом, чтобы оставлять LOOP, т.к. здесь это фактически низкоуровневое средство, из разряда SYSTEM.

------
Насчет указателей на массивы: я бы не стал говорить, что нельзя пользоваться языком, но -- да, делать софт с матрицами будем royal pain.


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

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
По умолчанию -- first choice -- подпроцедура вынесена на уровень модуля, инфу получает через параметры.

Мой опыт в том, что это однозначно first choice.
С такой формулировкой согласен.
Встречались, кажется, родственные идеи ("закон Деметера"?).
Просто я немного побаиваюсь, что Вирт (вдруг) возьмет и запретит "вложение" процедур. :)


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

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
Насчет указателей на массивы: я бы не стал говорить, что нельзя пользоваться языком, но -- да, делать софт с матрицами будем royal pain.
И не только с матрицами.
Попытаемся написать на таком "урезанном" Обероне хотя бы аналог сишной функции char *strdup(const char *str), сохраняющей строку (завершающуюся нулем) в куче. (Весьма полезно для создания разных таблиц.)
Конечно, я слишком резко выразился, что языком вообще нельзя будет пользоваться. Но введение неоправданных ограничений -- налицо.


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

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
AVC писал(а):
Что касается исключения LOOP ...

В лекции №8, которую я вывешивал, моё понимание проблемы полностью суммировано: вкратце: LOOP -- средство 1) моделирования цикла Дейкстры, 2) оптимизации.
Совсем неочевидно, что цикл Дейкстры (расширение цикла с предусловием) может заменить LOOP...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 31 Май, 2008 14:07 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
AVC писал(а):
Просто я немного побаиваюсь, что Вирт (вдруг) возьмет и запретит ... :)

Думаю, особо бояться нечего: что-то запретить, скажем, в КП уже не вдруг.

AVC писал(а):
Совсем неочевидно, что цикл Дейкстры (расширение цикла с предусловием) может заменить LOOP...

Вроде бы из теории Дейкстры именно эта возможность и следует.

А вот насколько можно пренебречь "оптимизированным" вариантом, мне не очевидно: кажется, не так уж редки случаи, когда условия довольно сложные, и там заодно что-то еще вычисляется, и приводить к чистому WHILE будет расточительно. Хотя можно обойти введением каких-то умных оболочек-фасадов...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 31 Май, 2008 21:19 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
AVC писал(а):
Совсем неочевидно, что цикл Дейкстры (расширение цикла с предусловием) может заменить LOOP...

Вроде бы из теории Дейкстры именно эта возможность и следует.
А как это может выглядеть на практике?
Допустим, у меня есть типичный LOOP:
LOOP
    куча кода;
    IF что-то там THEN тоже не сижу сложа руки; EXIT END;
    еще куча кода
END

Главное здесь то, что "что-то там" проверяется в середине цикла.
Сравним с "типовым" циклом Дейкстры (алгоритм Евклида, как всегда :) )
WHILE m > n DO m := m – n
ELSIF n > m DO n := n – m
END


Последний раз редактировалось AVC Суббота, 31 Май, 2008 21:29, всего редактировалось 1 раз.

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

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


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

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


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

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