Обзор темы - Расширение механизма обработки исключений
Автор
Сообщение
Victor__v
Заголовок сообщения:
Re: Расширение механизма обработки исключений
Оставлю тут на размышления откатные исключения Основная идея - снятие забот о корректности данных в случае ошибки Второстепенное - освобождение ресурсов.
Код:
: TEST \ addr u -- ?? ['] THROW >R BASE KEEP \ сохр. зн. переменной ['] EVALUATE CATCH
Этот код в случае ошибки корректно восстановит зн. переменной. Можно расширить перехват исключений, заточив его под откатность .
Цитата:
: CATCH: R> SP@ CELL+ >R EXECUTE DUP IF R> SP! ELSE RDROP THEN ;
: ?THROW DUP IF RDROP ELSE DROP THEN ; \ err -- : CATCH; RDROP 0 ;
Оставлю тут на размышления [b]откатные исключения[/b] Основная идея - снятие забот о корректности данных в случае ошибки Второстепенное - освобождение ресурсов. [code] : TEST \ addr u -- ?? ['] THROW >R BASE KEEP \ сохр. зн. переменной ['] EVALUATE CATCH
[/code] Этот код в случае ошибки корректно восстановит зн. переменной. Можно расширить перехват исключений, заточив его под откатность . [quote] : CATCH: R> SP@ CELL+ >R EXECUTE DUP IF R> SP! ELSE RDROP THEN ;
: ?THROW DUP IF RDROP ELSE DROP THEN ; \ err -- : CATCH; RDROP 0 ;
[/quote]
Добавлено: Ср сен 20, 2017 02:22
Victor__v
Заголовок сообщения:
Re: Расширение механизма обработки исключений
Хорошая идея Но как реализовать совместимость с остальным без использования ранних наработок? т.е. чтобы catch и catch( не были связаны между собою. Надо подумать. Хочется использовать и то и то, но чтобы они были независимы друг от друга
Хорошая идея Но как реализовать совместимость с остальным без использования ранних наработок? т.е. чтобы catch и catch( не были связаны между собою. Надо подумать. Хочется использовать и то и то, но чтобы они были независимы друг от друга
Добавлено: Вс дек 25, 2016 11:57
chu
Заголовок сообщения:
mOleg писал(а):
(в реальности два уровня: уровень номеров портов и значений значимых команд, оба могут поддерживаться Фортом)
"(в реальности два уровня: уровень номеров портов и значений и уровень значимых команд, оба могут поддерживаться Фортом)" - так ближе к оригиналу.
[quote="mOleg"](в реальности два уровня: уровень номеров портов и значений значимых команд, оба могут поддерживаться Фортом)[/quote]
"(в реальности два уровня: уровень номеров портов и значений и уровень значимых команд, оба могут поддерживаться Фортом)" - так ближе к оригиналу.
Добавлено: Пт май 08, 2009 08:04
ygrek
Заголовок сообщения:
mOleg писал(а):
хотя интересно получается. Работать-то оно работает, да обработчик исключения срабатывает и выдает сообщение, что не очень удобно. То есть таки это не баг, а фича, за которой не видно действия CATCH.
это на самом деле не баг, но особенность (никак не задокументированная) столкнулся, когда прикрутил messages к СПФу.
У вас есть прекрасный шанс задокументировать эту особенность (т.к. например я с этой особенностью никогда не сталкивался и вообще не понимаю о чём речь).
[quote="mOleg"]хотя интересно получается. Работать-то оно работает, да обработчик исключения срабатывает и выдает сообщение, что не очень удобно. То есть таки это не баг, а фича, за которой не видно действия CATCH.[/quote] Эта фича помогает баги ловить в программе. Игнорировать системные исключения -- ненормально. http://spf.sf.net/docs/intro.ru.html#catch [quote="mOleg"]это на самом деле не баг, но особенность (никак не задокументированная) столкнулся, когда прикрутил messages к СПФу.[/quote]
У вас есть прекрасный шанс задокументировать эту особенность (т.к. например я с этой особенностью никогда не сталкивался и вообще не понимаю о чём речь).
Добавлено: Пн дек 22, 2008 01:31
mOleg
Заголовок сообщения:
ygrek писал(а):
mOleg писал(а):и еще нарвался на ошибку -1002 , которая не ошибка, а сообщение обработчику о конце потока. Подробнее. В каком случае вы на неё нарвались. Код.
это на самом деле не баг, но особенность (никак не задокументированная) столкнулся, когда прикрутил messages к СПФу.
ygrek писал(а):
mOleg писал(а):да, и еще в случае возникновения исключения течет память, подгребаемая INCLUDED под себя. Не течёт. Опишите подробнее. Код.
да, действительно, я не прав.
[quote="ygrek"]mOleg писал(а):и еще нарвался на ошибку -1002 , которая не ошибка, а сообщение обработчику о конце потока. Подробнее. В каком случае вы на неё нарвались. Код.[/quote] это на самом деле не баг, но особенность (никак не задокументированная) столкнулся, когда прикрутил messages к СПФу.
[quote="ygrek"]mOleg писал(а):да, и еще в случае возникновения исключения течет память, подгребаемая INCLUDED под себя. Не течёт. Опишите подробнее. Код.[/quote]
да, действительно, я не прав.
Добавлено: Вс дек 21, 2008 21:03
mOleg
Заголовок сообщения:
ygrek писал(а):
mOleg писал(а):кстати, композиция ['] @ CATCH в СПФ не работает Работает. Опишите подробнее баг. Версия spf. Код.
на любой версии СПФ. (возможно оно будет работать в обработчике исключений? но в обычном случае нет)
<pre>
SP-FORTH - ANS FORTH 94 for Win95/98/Me/NT/2k/XP/Vista
Open source project at http://spf.sf.net Russian FIG at http://www.forth.org.ru ; Started by A.Cherezov
Version 4.19 Build 004 at 21.Dec.2008
: tt ['] @ CATCH . ;
Ok
0 tt
EXCEPTION! CODE:C0000005 ADDRESS:005525E0 WORD:@
USER DATA: 00331E94 THREAD ID: 00000CD0 HANDLER: 0012EFCC
STACK: (1) 0012FFC8 8054B038 7FFDE000 00000000 00000000 7C816D4F [00000000]
RETURN STACK:
0012EFC8 : 0055516C CATCH
0012EFCC : 0012EFE8
0012EFD0 : 0012FFBC
0012EFD4 : 0056BCA3 tt
0012EFD8 : 00567C5B INTERPRET_
0012EFDC : 00567CE2 INTERPRET
0012EFE0 : 00567F09 MAIN1
0012EFE4 : 0055516C CATCH
0012EFE8 : 0012EFF8
0012EFEC : 0012FFC0
0012EFF0 : 00567F59 QUIT
0012EFF4 : 0055516C CATCH
0012EFF8 : 00000000
0012EFFC : 0012FFC0
0012F000 : 0056B00D ERR-EXIT
0012F004 : 0056BBF6 (INIT)
END OF EXCEPTION REPORT
-1073741819 Ok ( 0 )
</pre>
хотя интересно получается. Работать-то оно работает, да обработчик исключения срабатывает и выдает сообщение, что не очень удобно. То есть таки это не баг, а фича, за которой не видно действия CATCH.
[quote="ygrek"]mOleg писал(а):кстати, композиция ['] @ CATCH в СПФ не работает Работает. Опишите подробнее баг. Версия spf. Код.[/quote]
на любой версии СПФ. (возможно оно будет работать в обработчике исключений? но в обычном случае нет)
<pre>
SP-FORTH - ANS FORTH 94 for Win95/98/Me/NT/2k/XP/Vista
Open source project at http://spf.sf.net
Russian FIG at http://www.forth.org.ru ; Started by A.Cherezov
Version 4.19 Build 004 at 21.Dec.2008
: tt ['] @ CATCH . ;
Ok
0 tt
EXCEPTION! CODE:C0000005 ADDRESS:005525E0 WORD:@
USER DATA: 00331E94 THREAD ID: 00000CD0 HANDLER: 0012EFCC
STACK: (1) 0012FFC8 8054B038 7FFDE000 00000000 00000000 7C816D4F [00000000]
RETURN STACK:
0012EFC8 : 0055516C CATCH
0012EFCC : 0012EFE8
0012EFD0 : 0012FFBC
0012EFD4 : 0056BCA3 tt
0012EFD8 : 00567C5B INTERPRET_
0012EFDC : 00567CE2 INTERPRET
0012EFE0 : 00567F09 MAIN1
0012EFE4 : 0055516C CATCH
0012EFE8 : 0012EFF8
0012EFEC : 0012FFC0
0012EFF0 : 00567F59 QUIT
0012EFF4 : 0055516C CATCH
0012EFF8 : 00000000
0012EFFC : 0012FFC0
0012F000 : 0056B00D ERR-EXIT
0012F004 : 0056BBF6 (INIT)
END OF EXCEPTION REPORT
-1073741819 Ok ( 0 )
</pre>
хотя 8) интересно получается. Работать-то оно работает, да обработчик исключения срабатывает и выдает сообщение, что не очень удобно. То есть таки это не баг, а фича, за которой не видно действия CATCH.
Добавлено: Вс дек 21, 2008 20:57
ygrek
Заголовок сообщения:
mOleg писал(а):
о, мне очень понравилось, как в СПФ сделан INCLUDED
Это баг?
mOleg писал(а):
и еще нарвался на ошибку -1002 , которая не ошибка, а сообщение обработчику о конце потока.
Подробнее. В каком случае вы на неё нарвались. Код.
mOleg писал(а):
кстати, композиция ['] @ CATCH в СПФ не работает
Работает. Опишите подробнее баг. Версия spf. Код.
mOleg писал(а):
да, и еще в случае возникновения исключения течет память, подгребаемая INCLUDED под себя.
Не течёт. Опишите подробнее. Код.
[quote="mOleg"]о, мне очень понравилось, как в СПФ сделан INCLUDED[/quote] Это баг?
[quote="mOleg"]и еще нарвался на ошибку -1002 , которая не ошибка, а сообщение обработчику о конце потока.[/quote] Подробнее. В каком случае вы на неё нарвались. Код.
[quote="mOleg"]кстати, композиция ['] @ CATCH в СПФ не работает[/quote] Работает. Опишите подробнее баг. Версия spf. Код.
[quote="mOleg"]да, и еще в случае возникновения исключения течет память, подгребаемая INCLUDED под себя.[/quote]
Не течёт. Опишите подробнее. Код.
Добавлено: Вс дек 21, 2008 12:57
mOleg
Заголовок сообщения:
ygrek писал(а):
Интересно -- что за непонятные баги?
о, мне очень понравилось, как в СПФ сделан INCLUDED
и еще нарвался на ошибку -1002 , которая не ошибка, а сообщение обработчику о конце потока.
кстати, композиция ['] @ CATCH в СПФ не работает
да, и еще в случае возникновения исключения течет память, подгребаемая INCLUDED под себя.
[quote="ygrek"]Интересно -- что за непонятные баги?[/quote]
о, мне очень понравилось, как в СПФ сделан INCLUDED
и еще нарвался на ошибку -1002 , которая не ошибка, а сообщение обработчику о конце потока.
кстати, композиция ['] @ CATCH в СПФ не работает
да, и еще в случае возникновения исключения течет память, подгребаемая INCLUDED под себя.
Добавлено: Сб дек 20, 2008 22:00
вопрос
Заголовок сообщения:
mOleg писал(а):
вопрос писал(а):
тот, кто хочет отловить все исключения (даже когда падает система), видиом. должен воспользоваться идеей "параллельного стека" (упоминалась в теме о возможных улучшениях к форту) и вариант реализации предлагал Михаил думаю, такая система могла бы сообщать зараннее, что предполагаемая операция некорректна
брр да нет, достаточно изменить "ловитель" исключений. Сделать его более качественным. с другой стортны, исключения и задумывались так, чтобы всегда завершать программу (только корректно).
Да, так проще, но всегда ли сложность - плохо.
[quote="mOleg"][quote="вопрос"]тот, кто хочет отловить все исключения (даже когда падает система), видиом. должен воспользоваться идеей "параллельного стека" (упоминалась в теме о возможных улучшениях к форту) и вариант реализации предлагал Михаил думаю, такая система могла бы сообщать зараннее, что предполагаемая операция некорректна[/quote] брр да нет, достаточно изменить "ловитель" исключений. Сделать его более качественным. с другой стортны, исключения и задумывались так, чтобы всегда завершать программу (только корректно).[/quote]Да, так проще, но всегда ли сложность - плохо.
Добавлено: Сб дек 20, 2008 19:13
ygrek
Заголовок сообщения:
mOleg писал(а):
ага и потенциальное место для непонятных багов (во всю ловлю в ядре СПФа: если хочется удовольствие получить - смотри в RECEIVE-WITH-XT )
Интересно -- что за непонятные баги?
[quote="mOleg"]ага и потенциальное место для непонятных багов (во всю ловлю в ядре СПФа: если хочется удовольствие получить - смотри в RECEIVE-WITH-XT )[/quote]
Интересно -- что за непонятные баги?
Добавлено: Сб дек 20, 2008 16:01
mOleg
Заголовок сообщения:
вопрос писал(а):
тот, кто хочет отловить все исключения (даже когда падает система), видиом. должен воспользоваться идеей "параллельного стека" (упоминалась в теме о возможных улучшениях к форту) и вариант реализации предлагал Михаил думаю, такая система могла бы сообщать зараннее, что предполагаемая операция некорректна
брр
да нет, достаточно изменить "ловитель" исключений. Сделать его более качественным.
с другой стортны, исключения и задумывались так, чтобы всегда завершать программу (только корректно).
[quote="вопрос"]тот, кто хочет отловить все исключения (даже когда падает система), видиом. должен воспользоваться идеей "параллельного стека" (упоминалась в теме о возможных улучшениях к форту) и вариант реализации предлагал Михаил думаю, такая система могла бы сообщать зараннее, что предполагаемая операция некорректна[/quote]
брр
да нет, достаточно изменить "ловитель" исключений. Сделать его более качественным.
с другой стортны, исключения и задумывались так, чтобы всегда завершать программу (только корректно).
Добавлено: Ср дек 17, 2008 13:55
Pretorian
Заголовок сообщения:
Когда то баги ловил человек, а ныне "машино", далеко пошел прогресс.
Когда то баги ловил человек, а ныне "машино", далеко пошел прогресс.
Добавлено: Вт дек 16, 2008 21:01
вопрос
Заголовок сообщения:
тот, кто хочет отловить все исключения (даже когда падает система), видимо, должен воспользоваться идеей "параллельного стека" (упоминалась в теме о возможных улучшениях к форту) и вариант реализации предлагал Михаил
думаю, такая система могла бы сообщать зараннее, что предполагаемая операция некорректна
тот, кто хочет отловить все исключения (даже когда падает система), видимо, должен воспользоваться идеей "параллельного стека" (упоминалась в теме о возможных улучшениях к форту) и вариант реализации предлагал Михаил
думаю, такая система могла бы сообщать зараннее, что предполагаемая операция некорректна
Добавлено: Вт дек 16, 2008 20:25
mOleg
Заголовок сообщения:
in4 писал(а):
mOleg писал(а):2) откладывать до определенного места (но зачем себе искать проблемы?)Более гибкий вариант. Дает возможность единообразно (и неизвестным заранее способом!) обработать несколько разных исключений. Типа для консольных приложений один способ, для графических - другой...
ага и потенциальное место для непонятных багов (во всю ловлю в ядре СПФа: если хочется удовольствие получить - смотри в RECEIVE-WITH-XT )
in4 писал(а):
О! можно доп. параметры завертывать в доп. фрейм исключений (или делать дополнение существующего фрейма), снимаемый обработчиком!
и тоже потом ловить баги.
вообще мне кажется, что значительно лучше выводить сообщения сразу, не откладывая.
[quote="in4"]mOleg писал(а):2) откладывать до определенного места (но зачем себе искать проблемы?)Более гибкий вариант. Дает возможность единообразно (и неизвестным заранее способом!) обработать несколько разных исключений. Типа для консольных приложений один способ, для графических - другой...[/quote] ага и потенциальное место для непонятных багов (во всю ловлю в ядре СПФа: если хочется удовольствие получить - смотри в RECEIVE-WITH-XT )
[quote="in4"]О! можно доп. параметры завертывать в доп. фрейм исключений (или делать дополнение существующего фрейма), снимаемый обработчиком![/quote]
и тоже потом ловить баги.
вообще мне кажется, что значительно лучше выводить сообщения сразу, не откладывая.
Добавлено: Вт дек 16, 2008 18:56
in4
Заголовок сообщения:
mOleg писал(а):
2) откладывать до определенного места (но зачем себе искать проблемы?)
Более гибкий вариант. Дает возможность единообразно (и неизвестным заранее способом!) обработать несколько разных исключений.
Типа для консольных приложений один способ, для графических - другой...
О! можно доп. параметры завертывать в доп. фрейм исключений (или делать дополнение существующего фрейма), снимаемый обработчиком!
[quote="mOleg"]2) откладывать до определенного места (но зачем себе искать проблемы?)[/quote]Более гибкий вариант. Дает возможность единообразно (и неизвестным заранее способом!) обработать несколько разных исключений.
Типа для консольных приложений один способ, для графических - другой...
О! можно доп. параметры завертывать в доп. фрейм исключений (или делать дополнение существующего фрейма), снимаемый обработчиком!