DRAKON.SU

Текущее время: Вторник, 17 Июнь, 2025 22:27

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




Начать новую тему Ответить на тему  [ Сообщений: 111 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 17:09 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Уважаемый Алексей Донской!

Большое спасибо, что Вы подняли этот вопрос.
Отвечаю по сути:
1. В языке Дракон предусмотрен бесконечный режим, который не имеет конца (см. рис. 88 и 89 в книге "Как улучшить работу ума".
2. На стр.173 сказано:

Цитата:
В отличие от обычных вычислительных и информационных программ в программах реального времени икона “конец” может отсутствовать. Это имеет место, когда нужно организовать бесконечный цикл, который прекращается особой внешней причиной, например выключением питания системы или разрушением объекта (рис. 88, 89).


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

3.Вы пишете:

Цитата:
неудобно (поскольку всё внутреннее содержание будет раскрываться на других листах, отдельными примитивами... и из них потребуется выход на глобальный уровень... то есть аналог механизма исключений, которого нет в Драконе)...


Возражение:
:!: Можно увеличить размер бумажных листов и таким образом решить проблему.
:!: Почему обязательно примитивами? Это не рекомендуется. Лучше использовать силуэты.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 17:50 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Владимир Паронджанов писал(а):
В языке Дракон предусмотрен бесконечный режим, который не имеет конца
Да, конечно, просто я не нашёл, как это сделать в редакторе Тышова...

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 18:26 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Alexey_Donskoy писал(а):
... нарушение структурности...


Что такое нарушение структурности?
О какой структурности мы говорим?

Вопреки традиции я утверждаю (и детально докаываю это в книге (см. главу 16) , что существуют два принципиально разных понятия:
:!: текстовое структурное программирование;
:!: визуальное структурное программирование.

Для удобства приведу начало главы 16

Цитата:
Г Л А В А 16

ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ

        Наше мышление основано в первую очередь на зрительном восприятии.
        Вадим Глезер

ПОСТАНОВКА ПРОБЛЕМЫ

Попробуем включить воображаемый “боковой прожектор” и взглянуть на проблему под другим углом зрения. Существует некоторое, причем весьма глубокое, хотя и не всегда очевидное сходство между изложенными выше идеями и концепцией структурного программирования. Исходя из этого, введем термин “визуальное структурное программирование” и определим его как набор правил, совпадающий с визуальным синтаксисом языка ДРАКОН. В концентрированном виде эти правила изложены в гл. 15.

Чтобы отграничить теоретические аспекты визуального структурного программирования от второстепенных деталей, нам понадобится термин “шампур-метод”. Впрочем, иногда выражения “шампур-метод” и “визуальное структурное программирование” будут использоваться как синонимы.
Размышляя над проблемой, автор пришел к следующим предварительным выводам или, лучше сказать, предположениям.

 Несмотря на наличие целого ряда общих признаков, текстовое и визуальное структурное программирование — существенно разные вещи.

 Традиционное (текстовое) структурное программирование является, по-видимому, наилучшим решением соответствующей задачи для традиционного (текстового) программирования.

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

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

 Принципы структуризации, положенные в основу визуального синтаксиса языка ДРАКОН, являются искомым решением.

В данной главе сделана попытка обосновать заявленные выводы.

Дальше идут подробные доказательства


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 18:35 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Ну да, и мне кажется, что визуальное структурное программирование настолько уж неограничительно, что куда уж страдать об отсутствии "jump-ов-exception-ов" (я не говорю про страдания тех, кто пишет обычные алгоритмы - то вообще не обсуждается, я здесь про страдания системщиков, когда надо выражать логику особых случаев).

Я тут приводил пример формализации на Драконе протокола СУБД "Седна". В текстовом описании упоминалось, что "ждите сообщения об ошибке всегда". Я сразу решил закладывать напрямую в схему все возможные места, где же оно может приходить. Даже при этом чересчур вольном определении в документации, схема совершенно не перегрузилась - посмотрите сами.

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


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

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Посмотрел я про Седну... Это даже не типичный случай исключения... здесь вполне определённый алгоритм, который можно реализовать через исключения, а можно и через goto ;)

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

Я, конечно, опять же понимаю, что дух Оберона предполагает принципиально другой подход к программированию, но...

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

А я говорю про случаи, когда по ошибке (да почему по ошибке, вообще разные ситуации бывают) требуется выход на другой логический уровень (в другую схему - надсистему). Если решать структурно, то придётся два принципиально разных алгоритмических пути пропускать через одно общее, узкое горлышко - стандартный выход из процедуры. А затем ставить кривой case/switch для анализа кода возврата... А если таковой выход происходит с n-го уровня рекурсии? Накладные расходы возрастают неимоверно! Когнитивные расходы возрастают также.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 19:46 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Alexey_Donskoy писал(а):
однако это:
- неверно (конца в принципе не существует, но редактор не даёт его удалить);
Удаление конца и конечной ветки предусмотрено в ДРАКОНЕ и в DRAKONE. Встаньте на икону "Конец" и удалите eё. Условием для удаления в Силуэте является наличие веточного цикла, он в Вашей схеме есть. Условием для удаления в Примитиве является наличие иконы "Вопрос" образующей цикл.


Последний раз редактировалось ==== Вторник, 25 Ноябрь, 2008 20:19, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 20:08 
Модератор
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 20:28 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Алгоритмы, действующие в особых случаях - это немного не из той оперы...
Ближе всего - процедуры обработки прерываний... Которые, кстати, я и расписываю примитивами... потому как силуэтов для них - многовато будет ;)

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

Раз уж такая развилка имеет место в реальных программных системах, возможно, и в Драконе следовало бы её продумать...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 22:12 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
У Пентковского (с.143) здесь
и
у Сафонова (с.65) здесь
было про обработку ситуаций и структурное предложение. Это комбинация цикл+BREAK+CASE.
Готовое и прерывание, и исключение..
Какую бы макроикону придумать?


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Так это "структурное предложение" и было придумано для преодоления линейности текста. Чтобы позволить отражать разные исходы (много выходов). В Драконе это есть как неотъемлемое свойство топологии. Из Вашего цикла должно уйти вниз ровно столько путей, сколько там исходов ("ситуаций").


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

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Дело-то в том, что не получится иконки... Получится межстраничная ссылка... То есть разрыв... Очень бы этого не хотелось, но, видимо, всё же придётся...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 22:54 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Почти так. В Драконе "всё" - это алгоритм. Всё связано через "оператор сочленения". Остальное, что не связано напрямую с правильным выполнением алгоритма(обработка исключений) или не вызывается прямо или косвенно из основного алгоритма(прерывание по внешнему событию..), можно было бы обозвать "ситуацией". Внутренности "ситуации" тоже можно изобразить на Драконе. Просто классно, да и основной алгоритм не замыливается.
Но..
Как связать "мысленным взглядом" эти части?
Общее у ситуаций одно - они вызывают переключение контекста(с возвратом в основной алгоритм или без). В Драконе вроде как нет "оператора разрыва сочленения" :(
BREAK вводить тоже нельзя.
М.б. сделать ожидание ситуации параллельным процессом?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 23:03 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Рэйлвэй Каген писал(а):
Как связать "мысленным взглядом" эти части?
Общее у ситуаций одно - они вызывают переключение контекста(с возвратом в основной алгоритм или без).
Вот они и есть, ключевые слова!

Параллельным процессом ожидание сделать никак нельзя - зона его влияния размазана по всему алгоритму от и до.

При этом неизбежно появляется третье измерение! И на этом третьем измерении явно видимым образом можно показать зоны пересечения действий ситуаций!

Однако же... теперь трёхмерность надо упихать в плоскость. Как?

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 23:17 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Alexey_Donskoy писал(а):
Параллельным процессом ожидание сделать никак нельзя - зона его влияния размазана по всему алгоритму от и до.

Лучше сказать так - есть возможность обращения к пар.процессу на протяжении всего алгоритма.

Пока есть только параллельный процесс ожидания ситуации.
Вложенность обработчиков тоже получится отразить, определяя параллельные процессы на уровне различных процедур, плюс придётся ввести правило распространения ситуаций. Если утрированно, то:
1. на цикл main - определяем параллельный процесс "арифм.ошибки"
2. где-нибудь в процедуре разбора сетевых пакетов - пар.процессы"Ошибка контрольной суммы", "Таймаут"
и т.д..
Правило (например): Ситуации распространяются снизу вверх до обработчика.
Т.е. параллельный процесс-обработчик ситуации, определённый на верхнем уровне не надо определять заново в процедуре уровнем ниже.

К сожалению, предложенное решение изначально неграфическое и не может быть структурировано графическими методами. Заплатка. Скажем так.


Последний раз редактировалось Рэйлвэй Каген Вторник, 25 Ноябрь, 2008 23:30, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 23:23 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Можно, конечно, и как бы "запустить параллельный процесс" ожидания ошибки... И завершить процесс по окончании защищаемого участка кода...

Только - а что он делать-то будет? Ведь точка возврата должна быть определена в основном алгоритме!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 25 Ноябрь, 2008 23:36 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
В этом-то весь подвох. Ведь нам нужен механизм, существующий как-бы параллельно с нашим алгоритмом, но выполняющийся только в моменты возникновения ситуации.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 26 Ноябрь, 2008 00:04 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Ну вот если что-то похожее на переключатель...
Или силуэт, вставленный внутрь алгоритма. Это может быть полезно, если явно адресами веток задавать переходы от finally к except или наоборот... Свободный выход как межстраничная ссылка, аналог дельфийскому Raise или Reraise...
Вложение:
exceptions.png
exceptions.png [ 11.58 КБ | Просмотров: 18405 ]

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 26 Ноябрь, 2008 00:26 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 341
Рэйлвэй Каген писал(а):
В этом-то весь подвох. Ведь нам нужен механизм, существующий как-бы параллельно с нашим алгоритмом, но выполняющийся только в моменты возникновения ситуации

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


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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 26 Ноябрь, 2008 11:26 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
TAU писал(а):
В этом вообще очень серьезный подвох Дракона - отсутствие поддержки параллельных процессов.


Уважаемый TAU!

Это неверно. Дракон способен поддерживать параллельные процессы. (См. книгу "Как улучшить работу ума" рис. 84, рис. 86, рис. 87 и сопутствующий текст).
В книге я рассмотрел только два оператора параллельных процессов: Пуск и Останов.
Однако набор операторов при необходимости можно увеличить, например:
Стоп (приостановка параллельного процесса);
Рестарт (повторный пуск параллельного процесса после приостаовки)
и т.д.

Или Вы имеете в виду нечто иное? В таком случае поправьте меня.


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

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


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

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


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

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