Введение
В вычислительной технике и компьютерном программировании обработка исключений — это процесс реагирования на возникновение исключений — аномальных или исключительных ситуаций, требующих специальной обработки — во время выполнения программы. Как правило, исключение прерывает нормальный ход выполнения и активирует предварительно зарегистрированный обработчик исключений; детали реализации зависят от того, является ли это аппаратным или программным исключением, а также от способа реализации программного исключения. Исключения определяются на разных уровнях компьютерной системы, типичными уровнями являются аппаратные прерывания, сигналы операционной системы (ОС) и исключения, определенные языком программирования. Каждый уровень требует своих методов обработки исключений, хотя они могут быть взаимосвязаны, например, аппаратное прерывание может быть преобразовано в сигнал ОС. Некоторые исключения, особенно аппаратные, могут быть обработаны настолько корректно, что выполнение программы может быть продолжено с точки прерывания.
computing
In computing and computer programming, exception handling is the process of responding to the occurrence of exceptions – anomalous or exceptional conditions requiring special processing – during the execution of a program. In general, an exception breaks the normal flow of execution and executes a pre registered exception handler; the details of how this is done depend on whether it is a hardware or software exception and how the software exception is implemented. Exceptions are defined by different layers of a computer system, and the typical layers are CPU defined interrupts, operating system (OS) defined signals, programming language defined exceptions. Each layer requires different ways of exception handling although they may be interrelated, e. g. a CPU interrupt could be turned into an OS signal. Some exceptions, especially hardware ones, may be handled so gracefully that execution can resume where it was interrupted.
Определение
Определение исключения основано на наблюдении, что каждая процедура имеет предусловия – набор обстоятельств, при которых она завершается "нормально". Механизм обработки исключений позволяет процедуре сгенерировать исключение, если эти предусловия нарушены, ресурс недоступен (например, отсутствующий файл, ошибка сетевого диска или ошибка нехватки памяти), или если подпрограмма обнаружила нормальную ситуацию, требующую специальной обработки, например, привлечение внимания или достижение конца файла. Социальное влияние оказывает значительное воздействие на область применения исключений и использование механизмов обработки исключений, то есть на "примеры использования, обычно встречающиеся в основных библиотеках, а также примеры кода в технических книгах, статьях в журналах, на онлайн-форумах и в стандартах кодирования организации". Обработка исключений решает проблему полупредиката, поскольку механизм различает нормальные возвращаемые значения и значения, указывающие на ошибку. В языках, не имеющих встроенной обработки исключений, таких как C, подпрограммы должны были бы сигнализировать об ошибке иным способом, например, с помощью общепринятого кода возврата и переменной errno. Термин "исключение" предпочтительнее термина "ошибка", поскольку он не подразумевает, что что-то пошло не так – условие, которое одна процедура или программист может рассматривать как ошибку, может не рассматриваться таковой другим, особенно если генерация исключения является нормальной и ожидаемой ситуацией в программе. Например, предположим, что функция поиска в ассоциативном массиве генерирует исключение, если для ключа не найдено значения. В зависимости от контекста, исключение "ключ отсутствует" может возникать гораздо чаще, чем успешный поиск.
История
Первая аппаратная обработка исключений была реализована в компьютере UNIVAC I в 1951 году. Арифметическое переполнение приводило к выполнению двух инструкций по адресу 0, которые могли передать управление или исправить результат. Программная обработка исключений получила развитие в 1960-х и 1970-х годах. Впоследствии обработка исключений была широко внедрена во многих языках программирования, начиная с 1980-х годов.
Исключения в отношении оборудования
Нет единого мнения относительно точного значения исключения применительно к аппаратному обеспечению. С точки зрения реализации, оно обрабатывается идентично прерыванию: процессор прекращает выполнение текущей программы, находит обработчик в таблице векторов прерываний для данного исключения или условия прерывания, сохраняет состояние и передает управление.