философия исключений

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

философия исключений

Сообщение БудДен » 10.02.19 23:32

Тут оберонщики выступают против исключений.

Поясняю. В исключениях есть два аспекта. Уничтожение какой-то части мира, созданного в ходе неправильного выполнения, и автоматическое освобождение ресурсов. Про освобождение ресурсов особо нечего и говорить. Оно подобно директиве "уходя, гасите свет". Мы запомнили, что свет нужно гасить уходя, и можно больше про свет не думать. Это finally.

Теперь про само исключение. Философия выброса исключения состоит в том, что мы для каждой ошибочной ситуации определяем повреждённый кусок мира и просто уничтожаем его. Мы считаем, что после остановки неверно пошедшей деятельности (нелокальном возврате куда-то «в начало» и освобождения ресурсов по finally) программа придёт в какое-то устойчивое состояние, при котором она может работать дальше.

Это правильно и этот шаблон поведения мы встречаем во всех отраслях мироздания.
  • В живом организме единицей уничтожения при борьбе с болезнью является целая клетка. Иммунная система не пытается чинить клетку, она просто её уничтожает, когда считает, что эта клетка заражена.
  • В общесте есть «отпущение грехов». Это касается далеко не только христианской культуры. Подобные обычаи списания долгов, очищения от скверны и т.п. есть в большинстве обществ. Противоположные примеры выглядят печально. Полная компенсация ущерба - это принцип «око за око». При его соблюдении однажды начавшаяся вражда может только нарастать. Целые народы могут «сгорать» в огне кровной мести, начало которой уже давно забыто. В итоге последствия одной ошибки могут длиться неограниченно долго. Другой пример - это прецедентное право, которое создаёт очень корявую законодательную систему, не имеющую способа упроститься.
  • В кораблях есть отсеки, отделённые водонепроницаемыми перегородками. Можно пожертвовать одним отсеком, при этом внутренний объём отсека полностью утрачивается, но протечка локализуется.
Ошибки происходят, но после них мир не должен разрушаться, также исправление ошибки не должно занимать безконечное время и, по возможности, мир не должен существенно деградировать. Выброс исключения - это способ обработки ошибок, когда мы признаём свою работу неудачной, оставляем её в прошлом, подчищаем грязь и продолжаем работу дальше. Конечно, гарантии полной очистки грязи никогда нет, да и мир наш вряд ли вечен. Во всяком случае, исключения - это достаточно практичный компромисс.

Ответить