Справочник Ada 95
13.9.1 Действительность данных
Некоторые действия, которые могут потенциально привести к ошибочному выполнению, сами по себе не являются ошибочными, но вместо этого могут привести к тому, что объекты станут аномальными. Последующее использование аномальных объектов может быть ошибочным.
Скалярный объект может иметь недействительное представление, что означает, что представление объекта не представляет никакого значения подтипа объекта. Основной причиной недействительных представлений являются неинициализированные переменные.
Аномальные объекты и недействительные представления объясняются в этом подразделе.
Динамическая семантика
Когда объект создаётся впервые, и все явные или по умолчанию инициализации выполнены, объект и все его части находятся в нормальном состоянии. Последующие операции обычно оставляют их нормальными. Однако, объект или часть объекта может стать аномальной следующими способами:
- Присвоение объекту прерывается из-за прерывания (см. 9.8) или из-за сбоя определённой языковой проверки (см. 11.6).
- Объект не является скалярным и передаётся в параметр in out или out импортированной процедуры или определённой языком входной процедуры, если после возврата из процедуры представление параметра не представляет значения подтипа параметра.
Не указано, действительно ли объект становится аномальным в этих случаях. Аномальный объект снова становится нормальным после успешного завершения присваивания объекту в целом.
Ошибка выполнения
Ошибка возникает при вычислении первичного элемента, являющегося именем, обозначающим аномальный объект, или при вычислении префикса, обозначающего аномальный объект.
Ограниченные (временно́й) ошибки
Если представление скалярного объекта не представляет значения подтипа объекта (возможно, потому что объект не был инициализирован), говорят, что объект имеет недействительное представление. Вычисление значения такого объекта является ограниченной ошибкой. Если ошибка обнаружена, возбуждается исключение Constraint_Error или Program_Error. В противном случае выполнение продолжается с использованием недействительного представления. Правила языка за пределами этого подраздела предполагают, что все объекты имеют действительные представления. Семантика операций с недействительными представлениями следующая:
- Если представление объекта представляет значение типа объекта, используется значение типа.
- Если представление объекта не представляет значения типа объекта, семантика операций с такими представлениями определяется реализацией, но сама по себе не приводит к ошибочному или непредсказуемому выполнению или к тому, что другие объекты становятся аномальными.
Ошибка выполнения
Вызов импортированной функции или экземпляра Unchecked_Conversion является ошибочным, если результат скалярный, а результат объекта имеет недействительное представление.
Разъяснение значения доступа является ошибочным, если оно не обозначает объект соответствующего типа или подпрограмму с соответствующим профилем, если оно обозначает несуществующий объект, или если это значение доступа к переменной, обозначающее константный объект. Такое значение доступа может существовать, например, из-за Unchecked_Deallocation, Unchecked_Access или Unchecked_Conversion.
ПРИМЕЧАНИЯ
18 Объекты могут стать аномальными из-за других видов действий, которые непосредственно обновляют представление объекта; однако такие действия обычно считаются непосредственно ошибочными.