OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 11:44

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




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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Суббота, 02 Ноябрь, 2019 18:15 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1543
Придумал такой вариант, как выделить один код исключения для "молчаливого исключения", которое не показывается. Изменения минимальны, выглядит культурненько. Ы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Суббота, 02 Ноябрь, 2019 18:36 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Может завести пару функций, вроде TrapsOn/TrapsOff. В блоке FINALLY вызывать TrapsOn и будет всем счастье :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Суббота, 02 Ноябрь, 2019 18:37 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Суббота, 02 Ноябрь, 2019 18:45 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Ярослав Романченко писал(а):
Может завести пару функций, вроде TrapsOn/TrapsOff. В блоке FINALLY вызывать TrapsOn и будет всем счастье :)
оно же полностью вырубит обработку исключений, в чем здесь счастье?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Суббота, 02 Ноябрь, 2019 19:18 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1543
Можно временно отключать показ, а не отключать обработку. Но всё равно мне не нравится. Касаемо своего глобального обработчика, это Machine.InstallHandler?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Вторник, 05 Ноябрь, 2019 18:07 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1543
Вот так сделал:

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Среда, 06 Ноябрь, 2019 07:52 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Это какие-то странные игры. Если произошла исключительная ситуация - нужно реагировать а не прятать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Среда, 06 Ноябрь, 2019 15:36 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1543
Ну, тут и до священной войны недалеко. Попробую отшутиться: я странный, мне можно :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Среда, 06 Ноябрь, 2019 15:47 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Где нужна обработка исключений, кроме как для общения с внешним для А2 миром?
В A2 если файл, например, не открылся, принято проверять переменную на NIL


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Среда, 06 Ноябрь, 2019 17:49 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Среда, 06 Ноябрь, 2019 22:32 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Для парсинга методом рекурсивного спуска исключения не нужны. И без них этот метод хорошо работает.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Четверг, 07 Ноябрь, 2019 09:47 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Четверг, 07 Ноябрь, 2019 11:56 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Пятница, 08 Ноябрь, 2019 14:35 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Четверг, 10 Февраль, 2022 04:14 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 220
Откуда: Питер
Вставлю пять копеек от числодробильщика.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Четверг, 10 Февраль, 2022 19:03 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1543
Возможен ещё такой вариант обработки проблем с плавающей точкой, что результат устанавливается в NaN, который нужно периодически "руками" проверять.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Воскресенье, 13 Февраль, 2022 21:32 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 220
Откуда: Питер
Это ведь то же самое что "поставить проверку на каждую математическую операцию".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка исключений
СообщениеДобавлено: Воскресенье, 13 Февраль, 2022 23:50 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1543
Да. Но ведь можно же. И кстати, необязательно именно на каждую.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ] 

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


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

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


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

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