Spec-Zone.ru › Ada 2012
Справочник Ada 2012

11.6 Исключения и оптимизация

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

Динамическая семантика

Остальная часть данного международного стандарта (вне этого подпункта) определяет каноническую семантику языка. Каноническая семантика заданной (допустимой) программы определяет набор возможных внешних эффектов, которые могут возникнуть в результате выполнения программы с заданными входными данными.
Как объяснено в 1.1.3, «Соответствие реализации стандарту», внешний эффект программы определяется в терминах её взаимодействия с внешней средой. Следовательно, реализация может выполнять любые внутренние действия, в любом порядке или параллельно, до тех пор, пока внешний эффект выполнения программы соответствует канонической семантике или правилам данного подпункта.

Разрешения для реализации

Реализации предоставляются следующие дополнительные разрешения:
  • Реализация не обязана всегда генерировать исключение при возникновении ошибки, определяемой языком. Вместо этого операция, которая вызвала ошибку, может просто вернуть неопределённый результат. Исключение должно быть сгенерировано реализацией только если, при отсутствии его генерации, значение этого неопределённого результата окажет влияние на внешние взаимодействия программы. При определении этого, реализация не должна предполагать, что неопределённый результат имеет значение, которое принадлежит его типу, или даже базовому диапазону его типа, если он является скалярным. После удаления генерации исключения, каноническая семантика, как правило, позволит реализации опустить код проверки и часть или все операции.
  • Если исключение генерируется из-за ошибки, определённой языком, то при достижении соответствующего обработчика исключений exception_handler (или завершения задачи, если такового нет), внешние взаимодействия должны отражать только то, что исключение было сгенерировано где-то внутри выполнения sequence_of_statements с обработчиком (или task_body), возможно, ранее (или позже, если взаимодействия независимы от результата проверочной операции), чем это определено канонической семантикой, но не внутри выполнения отложенной операции прерывания или независимой подпрограммы, которая не динамически включает выполнение конструкции, проверка которой завершилась ошибкой. Независимая подпрограмма – это подпрограмма, определённая за пределами библиотечной единицы, содержащей конструкцию, проверка которой завершилась ошибкой, и для которой аспект Inline равен False. Любое присваивание, произошедшее за пределами таких отложенных операций прерывания или независимых подпрограмм, может быть нарушено генерацией исключения, что приведёт к аномальному состоянию объекта или его частей, а также к ошибочному использованию объекта в дальнейшем, как объяснено в 13.9.1.
ПРИМЕЧАНИЯ
6 Разрешения, предоставленные в этом подпункте, могут повлиять на семантику программы только в том случае, если программа не пройдёт языковую проверку.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API