OberonCore
https://forum.oberoncore.ru/

обработка исключений
https://forum.oberoncore.ru/viewtopic.php?f=22&t=6468
Страница 1 из 1

Автор:  budden [ Суббота, 02 Ноябрь, 2019 17:02 ]
Заголовок сообщения:  обработка исключений

Я понимаю, что тема идеологически некорректная, но всё же я хочу использовать исключения для передачи управления. Насколько я понял, исключения в A2 уже обрабатываются (и блоки FINALLY тоже вызываются), проблема лишь с их отображением. Красный экранчик иногда не нужен. Можно его вовсе отключить (я накопал это: http://вики-ч115.программирование-по-русски.рф/Ч115/ОбработкаTRAP-ов), но я хочу отключить его только для отдельных процессов. Сделать это кажется не так уж сложно, правда, придётся менять платформо-зависимый код. Вопрос - какие будут чисто технически подводные камни? Если буквально, то какие грабли будут, связанные с несовершенством самого механизма исключений в A2 или во вселенной?

Автор:  budden [ Суббота, 02 Ноябрь, 2019 18:15 ]
Заголовок сообщения:  Re: обработка исключений

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

Автор:  Ярослав Романченко [ Суббота, 02 Ноябрь, 2019 18:36 ]
Заголовок сообщения:  Re: обработка исключений

Может завести пару функций, вроде TrapsOn/TrapsOff. В блоке FINALLY вызывать TrapsOn и будет всем счастье :)

Автор:  Sergej Durmanov [ Суббота, 02 Ноябрь, 2019 18:37 ]
Заголовок сообщения:  Re: обработка исключений

budden писал(а):
Я понимаю, что тема идеологически некорректная
В теме обработки исключений в а2/ао нет никакой идеалогии и генеральной линии партии. Более того, в ETHZ велись эксперименты в этом направлении. И впооне возможно, что обработка исключительных ситуаций "по месту" в ао будет.
Сейчас же можно устанавливать свой централизованный обработчик, который будет делать то, что тебе нужно под конкретный проект.

Автор:  Sergej Durmanov [ Суббота, 02 Ноябрь, 2019 18:45 ]
Заголовок сообщения:  Re: обработка исключений

Ярослав Романченко писал(а):
Может завести пару функций, вроде TrapsOn/TrapsOff. В блоке FINALLY вызывать TrapsOn и будет всем счастье :)
оно же полностью вырубит обработку исключений, в чем здесь счастье?

Автор:  budden [ Суббота, 02 Ноябрь, 2019 19:18 ]
Заголовок сообщения:  Re: обработка исключений

Можно временно отключать показ, а не отключать обработку. Но всё равно мне не нравится. Касаемо своего глобального обработчика, это Machine.InstallHandler?

Автор:  budden [ Вторник, 05 Ноябрь, 2019 18:07 ]
Заголовок сообщения:  Re: обработка исключений

Вот так сделал:

https://gitlab.com/budden/jaos/commit/b ... 494a1cbce1

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

Автор:  Kemet [ Среда, 06 Ноябрь, 2019 07:52 ]
Заголовок сообщения:  Re: обработка исключений

Это какие-то странные игры. Если произошла исключительная ситуация - нужно реагировать а не прятать.

Автор:  budden [ Среда, 06 Ноябрь, 2019 15:36 ]
Заголовок сообщения:  Re: обработка исключений

Ну, тут и до священной войны недалеко. Попробую отшутиться: я странный, мне можно :)

Автор:  Ярослав Романченко [ Среда, 06 Ноябрь, 2019 15:47 ]
Заголовок сообщения:  Re: обработка исключений

Где нужна обработка исключений, кроме как для общения с внешним для А2 миром?
В A2 если файл, например, не открылся, принято проверять переменную на NIL

Автор:  budden [ Среда, 06 Ноябрь, 2019 17:49 ]
Заголовок сообщения:  Re: обработка исключений

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

В случае A2 можно выделить парсинг в отдельную активность. Я, кстати, пока не понял, почему TFPET не ломается после ошибки в парсере, вызывающей красный экран. Не смотрел, как вызывается, да и вообще не понимаю, как точно происходит обработка исключения в A2.

Автор:  Rifat [ Среда, 06 Ноябрь, 2019 22:32 ]
Заголовок сообщения:  Re: обработка исключений

Для парсинга методом рекурсивного спуска исключения не нужны. И без них этот метод хорошо работает.

Нужно понимать, что исключение - это по сути goto и всё, что из этого следует.

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

Автор:  budden [ Четверг, 07 Ноябрь, 2019 09:47 ]
Заголовок сообщения:  Re: обработка исключений

В моём решении всего лишь выделен один-единственный код ошибки 7777, для которого отключёно оповещение об ошибке. Получился аналог EAbort из Delphi, http://bourabai.ru/einf/Delphi/Delphi_p ... ndex9.html

Но он пока не понадобился, поэтому живёт в своей ветке, которая никуда не влита. Давайте не будем тратить время на священные войны :)

Автор:  Wlad [ Четверг, 07 Ноябрь, 2019 11:56 ]
Заголовок сообщения:  Re: обработка исключений

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

Автор:  budden [ Пятница, 08 Ноябрь, 2019 14:35 ]
Заголовок сообщения:  Re: обработка исключений

А мы можем как-то вынести общие обсуждения в отдельный форум и отделить их от собственно A2? В A2 уже приняты некоторые решения на эту тему. В частности, красный экран не является обязательным - его возникновение обусловлено наличием строчки в Configuration.XML
Цитата:
<Setting name="TrapWriter" value="WMTrapWriter.Install"/>

Другое дело, что при обработке ошибки нельзя получить информацию о роде ошибки, а есть только текст, который выводится в красный экран. Это может быть для чего-то неправильно, но для обсуждения этого давайте создадим тему "обсуждение правильности решений в A2 с такой-то точки зрения".

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/