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 с такой-то точки зрения". |
Автор: | GameHunter [ Четверг, 10 Февраль, 2022 04:14 ] |
Заголовок сообщения: | Re: обработка исключений |
Вставлю пять копеек от числодробильщика. Насколько я знаю, исключения полезны не только для общения с внешним миром, но и для реагирования на вычислительнын ошибки. Невозможно поставить проверку на каждую математическую операцию - во первых, для вещественных чисел не всегда ясно как это сделать, во вторых будет большой оверхед. А по факту исключения можно сделать какие-то выводы - например, о том, что решается система линейных уравнений с плохообусловленной матрицей. |
Автор: | budden [ Четверг, 10 Февраль, 2022 19:03 ] |
Заголовок сообщения: | Re: обработка исключений |
Возможен ещё такой вариант обработки проблем с плавающей точкой, что результат устанавливается в NaN, который нужно периодически "руками" проверять. |
Автор: | GameHunter [ Воскресенье, 13 Февраль, 2022 21:32 ] |
Заголовок сообщения: | Re: обработка исключений |
Это ведь то же самое что "поставить проверку на каждую математическую операцию". |
Автор: | budden [ Воскресенье, 13 Февраль, 2022 23:50 ] |
Заголовок сообщения: | Re: обработка исключений |
Да. Но ведь можно же. И кстати, необязательно именно на каждую. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |