Долгое время понятие "исключения" относилось к аппаратным прерываниям, которые возникали на аппаратном уровне. Затем появились программные исключения, которые создавались и резолвились самими программистами, на уровне приложения.
Для этого использовались try/catch/finnaly методы.
Интересно, что механизмы исключений в разных языках работают похожим образом - это дополнительные программные абстракции, которые управляют потоком управления программы.
Технически это просто вызов специальных методов (throw, raise и т.д.), которые затем расскручивают стек в поисках обработчика (catch).
Концепция (не реализация, а именно концепция) невероятно сложная, так как "исключение" обладает как сложной семантикой, так и сильно усложняет логику программы (по сути мы должны исходить из мысли, что каждый оператор - это последний оператор, а далее может быть exception). Поэтому многие программисты критикуют подходы, использующие исключения.
Очень часто исключения упрощают до набора простых правил, из-за которых теряется значительная часть семантики. Это приводит к тому, что исключения выбрасывают в любом удобном и неудобном случае.
Вот статейка про то как работают исключения в C++, по сути ничего "исключительного" (кроме семантики), в обработке исключений на уровне языка, нет. https://habr.com/ru/articles/279111/
Post #1860
11.3K
- 👍 40
- ❤ 5
- 🤡 1