DRAKON.SU

Текущее время: Четверг, 28 Март, 2024 13:15

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




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Суббота, 13 Июнь, 2009 17:12 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Здесь обсуждались ДРАКОН алгоритмы обработки исключений на DELPHI.
Вложение:
Try.png


Последний раз редактировалось ==== Суббота, 13 Июнь, 2009 21:04, всего редактировалось 1 раз.

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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
Геннадий Тышов писал(а):
Здесь обсуждались ДРАКОН алгоритмы обработки исключений на DELPHI.
И как по этой схеме понять, откуда начинать смотреть в случае исключения? Целевая точка может быть на любой схеме "вышестоящего" уровня и все их надо просматривать последовательно в поисках обработчика. По-моему, не похоже на симультантное восприяетие.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Июнь, 2009 18:48 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Евгений Темиргалеев писал(а):
Геннадий Тышов писал(а):
Здесь обсуждались ДРАКОН алгоритмы обработки исключений на DELPHI.
И как по этой схеме понять, откуда начинать смотреть в случае исключения? Целевая точка может быть на любой схеме "вышестоящего" уровня и все их надо просматривать последовательно в поисках обработчика. По-моему, не похоже на симультантное восприяетие.

Эти варианты алгоритмов:
- Выводят обработку исключений из главного шампура обработки данных, то есть работает принцип Дракона "чем хуже, тем правее". Восприятие улучшается.
- Состояние исключения фиксируется оператором "Try", что отображается иконой типа "Вопрос". При наличии исключения, управление передается на оператор "Except" или "Finally".
- В сообщении, AIN рассказал, что при выполнении оператора "Exit"-выход из процедуры между операторов "Try" и "Finally", выход не производится, а управление передается на оператор "Finally". Это и позволяет организовать при множественных "Exit" общий выход. Применение можно видеть в примере.


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
Геннадий Тышов писал(а):
- Состояние исключения фиксируется оператором "Try", что отображается иконой типа "Вопрос". При наличии исключения, управление передается на оператор "Except" или "Finally".
Какой Вы предлагаете способ поиска/отображения в схемах точки перехода в случаях, если:
- исключение не перечислено в on (средняя схема)?
- в блоке except оно повторно возбуждается raise?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Июнь, 2009 20:15 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Геннадий Тышов писал(а):
Здесь обсуждались ДРАКОН алгоритмы обработки исключений на DELPHI.
Эти схемы стали бы верными в случае использования флагов ошибки и завершения. Применять их для отображения исключений нельзя, поскольку полностью искажается смысл механизма обработки исключений и нарушается принцип классического Дракона о следовании по маршруту.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Июнь, 2009 20:42 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Евгений Темиргалеев писал(а):
Какой Вы предлагаете способ поиска/отображения в схемах точки перехода в случаях, если:
1. - исключение не перечислено в on (средняя схема)?
2. - в блоке except оно повторно возбуждается raise?
1. В переключателе ввести икону "Вариант" с текстом "else" и соответственно обработку. Рисунок заменил.
2. Должна существовать защита с уровнем выше (внешняя), на нее будет передача управления.
Рэйлвэй Каген писал(а):
Эти схемы стали бы верными в случае использования флагов ошибки и завершения. Применять их для отображения исключений нельзя, поскольку полностью искажается смысл механизма обработки исключений и нарушается принцип классического Дракона о следовании по маршруту.
В DELPHI таких флагов нет, и я не понял о чем речь и какие проблемы с принципом?


Последний раз редактировалось ==== Суббота, 13 Июнь, 2009 21:32, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Июнь, 2009 21:09 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Геннадий Тышов писал(а):
В DELPHI таких флагов нет
Зато в дельфи есть исключения, а в Драконе пока нет адекватного механизма их отображения.

И речь о том, что по Вашим схемам здесь, согласно правил Дракона, выполнится весь блок, находящийся внутри секции try-except, и только потом состоится обработка исключения. Даже в дельфи это не совсем так.. Разбейте икону "Операторы" внутри секции try-except на несколько "Действий" и попробуйте заново посмотреть на проблему. Надеюсь, Вы увидите ошибку.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Июнь, 2009 21:29 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Действует принцип "чем хуже, тем на шампур правее", у нас, возникло исключение - ушли с главного маршрута на правую ветвь иконы "Try"=Да.
Задача Дракон-алгоритма обозначить круг проблем, конкретно они решаются при реализации программистом.
"Try" включает механизм контроля, и передает управление на обработку исключения, прервав обработку по главному маршруту.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Июнь, 2009 21:49 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Геннадий Тышов писал(а):
"Try" включает механизм контроля, и передает управление на обработку исключения, прервав обработку по главному маршруту.
Да. Только по правилам Дракона эта передача управления должна быть отображена соответствующим маршрутом. Переходы из любой точки на главном маршруте(внутри секции try-except), где возникло исключение - на секцию обработки. Их-то и нет на Ваших схемах, они подразумеваются. Так нельзя. На сегодня мы просто обязаны явно указывать передачу управления на Дракон-схемах.
И только потом будет "чем правее, тем хуже" - в обработчике исключения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Июнь, 2009 22:25 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
У Вас прямолинейная логика и требования. Но ведь:
1. Возможен компромисс - присоединить комментарий и изложить требования.
2. Есть алгоритмические примечания к иконам - поместить требования туда. В справке о их назначении, именно это говорится.
3. Укрупнить действия секции Try-Except до 1-й иконы - "Вставки". На уровне данной схемы это будет вполне логично.
4. На сегодня, язык Дракон за 20 лет вполне устоялся, существует литература, широкие массы народа ознакомились и осваивают. В ракетных делах этой проблемы нет. Нам остается принять его как данность и оставаться в его рамках.
5. Есть пример (прислали) использования языка и и.с. для создания учебного - справочного пособия в гуманитарной науке - юстиции. Там этой проблемы вообще не будет, при этом активно используются левые и правые комментарии.
6. Область действия исключения видна явно, она заключена на главном маршруте между операторами языка программирования Try-End.


Последний раз редактировалось ==== Суббота, 13 Июнь, 2009 23:26, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Июнь, 2009 23:27 

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

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


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
Геннадий Тышов писал(а):
Евгений Темиргалеев писал(а):
Какой Вы предлагаете способ поиска/отображения в схемах точки перехода в случаях, если:
2. - в блоке except оно повторно возбуждается raise?
2. Должна существовать защита с уровнем выше (внешняя), на нее будет передача управления.
Да. Только (говоря об исключениях как в делфи) этот уровень не определён. Т.е. это может быть любая схема уровнем выше. И чтобы её найти, нужно просматривать последовательно все схемы подряд.
Рэйлвэй Каген писал(а):
Геннадий Тышов писал(а):
"Try" включает механизм контроля, и передает управление на обработку исключения, прервав обработку по главному маршруту.
Да. Только по правилам Дракона эта передача управления должна быть отображена соответствующим маршрутом. Переходы из любой точки на главном маршруте(внутри секции try-except), где возникло исключение - на секцию обработки. Их-то и нет на Ваших схемах, они подразумеваются. Так нельзя. На сегодня мы просто обязаны явно указывать передачу управления на Дракон-схемах.
Поддерживаю. Плюс не надо забывать, что исключения могут возникать независимо от того, включили мы механизм контроля или нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Июнь, 2009 21:37 

Зарегистрирован: Среда, 27 Май, 2009 01:41
Сообщения: 33
Вопрос: как отображать на Драконе транзакции (код, выполняемый в транзакции)? с учетом того, что невозможность зафиксировать транзакцию может быть трактована и как исключительная ситуация и как неисключительная ситуация?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Июнь, 2009 23:27 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Транзакция - это абстракция исполнения, основанная на использовании точек восстановления. Важно лишь одно - успешно завершена транзакция или нет, т.е. принимаем результат или откатываемся. Т.е. изобразить можно как любой линейный код, где "Begin Tran", "Commit Tran" и "Rollback Tran" - процедуры создания, удаления точек восстановления и отката(соответственно).
Код:
Begin Tran
      Update      TABLE_A
      Set   X = X + 1
      Where       Y = 100

      Update TABLE_B
      Set   Z = Z + 1

      If @@rowcount = 0 or @@error !=0 /* no rows were hit by our update */
      Begin
            Rollback Tran
            Print `Error occurred, no rows were updated'
            Return
      End
Commit Tran

Что касается исключений, то в большинстве реализаций откат автоматом произойдёт только для системных исключений - тут и изображать ничего не надо, а для пользовательских - придётся откатывать вручную внутри секций catch или except. С изображением переходов на эти секции в Драконе вопрос пока не решён.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 19 Июнь, 2009 05:01 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 53
На отдельный лист их.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Июнь, 2009 01:22 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 24
GUEST писал(а):
На отдельный лист их.


Ага. Исключения по сути и есть отдельное измерение - вот и пусть будет если не 3D, то просто отдельная плоскость + ссылки между плоскостями. Все попытки изобразить исключения в одной плоскости с основной логикой - противоречат самой идее исключительных ситуаций.

P.S. А вот еще есть инициализация/финализация. Обычно их хочется видеть вместе, но на схеме они получаются разнесены в пространстве и явно не обозначены. Особенно это чувствуется после использования конструкторов/деструкторов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Июнь, 2009 07:14 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Vlad писал(а):
GUEST писал(а):
На отдельный лист их.
Ага..
И это правильно. Но появляется парочка проблем:
1. секции try получаются именованными, равно как и сам обработчик.
2. как-то надо решить вопрос с использованием в обработчике локального контекста защищаемой процедуры.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Июнь, 2009 09:46 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 112
Откуда: Беларусь, Минск
"try except" - это как механизм выглядит, а не как он работает. А Дракон, наверно, всё-таки показывает работу и старается делать это так, чтобы выглядела она удобочитаемой. "try except" - это конструкция из мира, где не требуется обязательная наглядность.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Июнь, 2009 18:24 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 53
Рэйлвэй Каген писал(а):
2. как-то надо решить вопрос с использованием в обработчике локального контекста защищаемой процедуры.
Какой?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Июнь, 2009 20:28 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Valery Solovey писал(а):
"try except" - это как механизм выглядит, а не как он работает. А Дракон, наверно, всё-таки показывает работу и старается делать это так, чтобы выглядела она удобочитаемой. "try except" - это конструкция из мира, где не требуется обязательная наглядность.
Вот именно. Однако исключение (и говорили уже давно об этом) слишком многовариантно, изобразить его алгоритм наглядно невозможно (это будет куча ответвлений в каждой операции, которая может вызвать исключение).

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

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


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

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


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

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


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

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