Справочник по Ada 2012
H.3.1 Предикат Reviewable
Данный предикат направляет реализацию на предоставление информации, облегчающей анализ и проверку объектного кода программы, в частности, для определения времени выполнения и использования памяти, а также для установления соответствия между исходным и объектным программами.
Синтаксис
Форма предиката pragma Reviewable имеет следующий вид:
pragma Reviewable;
Правила после компиляции
Предикат Reviewable является предикатом конфигурации. Он применяется ко всем compilation_unitе, включённым в партицию.
Требования к реализации
Реализация должна предоставлять следующую информацию для любой единицы компиляции, к которой применяется такой предикат:
- Где остаются проверки, сгенерированные компилятором, во время выполнения;
- Идентификация любого конструкта с определённой языком проверкой, которая распознаётся до выполнения как определённо приводящая к ошибке при выполнении (даже если генерация проверок во время выполнения была подавлена);
- Для каждого считывания скалярного объекта, идентификация считывания как «известно инициализированного» или «возможно неинициализированного», независимо от того, применяется ли предикат Normalize_Scalars;
- Где неявно вызываются служебные подпрограммы во время выполнения;
- Список объектного кода, включая:
Машинные инструкции с относительными смещениями;
Где каждый объект данных хранится в течение своего жизненного цикла;
Соответствие с исходной программой, включая идентификацию кода, сгенерированного для каждого объявления и каждого оператора.
- Идентификация каждого конструкта, для которого реализация обнаруживает возможность ошибочного выполнения;
- Для каждой подпрограммы, блока, задачи или другого конструкта, реализованного путём резервирования и последующего освобождения области в стеке во время выполнения, идентификация длины фиксированной части области и указание, резервируется ли нефиксированная часть области в стеке или в динамически управляемой области памяти.
Реализация должна предоставлять следующую информацию для любой партиции, к которой применяется предикат:
- Список объектного кода всей партиции, включая код инициализации и завершения, а также компоненты системного времени выполнения, а также идентификацию тех инструкций и данных, которые будут перемещены при загрузке;
- Описание модели времени выполнения, относящейся к партиции.
Реализация должна предоставлять информацию о потоке управления и потоке данных как внутри каждой единицы компиляции, так и между единицами компиляции партиции.
Рекомендации по реализации
Реализация должна предоставлять указанную информацию как в удобочитаемом, так и в машиночитаемом формате и должна документировать последний для облегчения дальнейшей обработки автоматизированными инструментами.
Списки объектного кода должны предоставляться как в символьном формате, так и в соответствующем числовом формате (например, шестнадцатеричном или восьмеричном).
ПРИМЕЧАНИЯ
6 Порядок разработки библиотечных единиц будет документирован даже в отсутствие предиката pragma Reviewable (см. 10.2).