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