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

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

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

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

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

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

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


Spec-Zone.ru

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