Справочник по Ada 2012
13.12 Ограничения pragma и профиль pragma
Pragma Restrictions выражает намерение пользователя соблюдать определенные ограничения. Pragma Profile выражает намерение пользователя соблюдать набор ограничений или другие указанные политики выполнения. Это может способствовать созданию более простых сред выполнения.
Синтаксис
Форма pragma Restrictions следующая:
pragma Restrictions(ограничение{, ограничение});
ограничение ::= ограничение_идентификатор
| параметр_ограничения_идентификатор => аргумент_параметра_ограничения
| параметр_ограничения_идентификатор => аргумент_параметра_ограничения
Правила разрешения имен
Если не указано иное для конкретного ограничения, ожидается, что выражение будет любого целочисленного типа.
Правила допустимости
Если не указано иное для конкретного ограничения, выражение должно быть статическим и его значение должно быть неотрицательным.
Параграф 7 был удален.
Правила после компиляции
Pragma Restrictions — это pragma конфигурации. Если pragma Restrictions применяется к любому модулю компиляции, включенному в раздел, это может наложить одно или оба из двух типов требований, как указано для конкретного ограничения:
- Ограничение может наложить требования на некоторые или все единицы, составляющие раздел. Если не указано иное для конкретного ограничения, такое требование применяется ко всем единицам, составляющим раздел, и проверяется с помощью проверки после компиляции.
- Ограничение может наложить требования на поведение программы во время выполнения, как указано в спецификации поведения во время выполнения, связанной с нарушением требования.
Для проверки того, содержит ли раздел конструкции, нарушающие какое-либо ограничение (если не указано иное для конкретного ограничения):
- Образцы обобщенных типов логически расширяются в момент создания экземпляра;
- Если объект типа объявлен или выделен и не инициализирован явно, то предполагается, что все выражения, присутствующие в определении типа и любых его предков, используются;
- Выражение по умолчанию для формального параметра или формального объекта обобщения рассматривается как используемое только в том случае, если соответствующий фактический параметр не указан в данном вызове или создании экземпляра.
Разрешения реализации
Реализация может предоставить ограничения, определенные реализацией; идентификатор ограничения, определенного реализацией, должен отличаться от идентификаторов языковых ограничений.
Реализация может установить ограничения на значения выражения, которые поддерживаются, и ограничения на поддерживаемые комбинации ограничений. Последствия нарушения таких ограничений определяются реализацией.
Реализация может опустить проверку ограничений для кода, который распознается во время компиляции как недостижимый и для которого не генерируется код.
Всякий раз, когда проверка ограничения не требуется до выполнения, реализация может тем не менее проверить ограничение до выполнения раздела, к которому применяется ограничение, при условии, что каждое выполнение раздела нарушит ограничение.
Синтаксис
Форма pragma Profile следующая:
pragma Profile (идентификатор_профиля {, ассоциация_аргумента_pragma});
Правила допустимости
идентификатор_профиля должен быть именем профиля использования. Семантика любых ассоциации_аргумента_pragma определяется профилем использования, указанным идентификатором_профиля.
Статическая семантика
Профиль эквивалентен набору pragmas конфигурации, определенному для каждого профиля использования.
Правила после компиляции
Pragma Profile — это pragma конфигурации. Может быть более одного pragma Profile для одного раздела.
Разрешения реализации
Реализация может предоставить профили использования, определенные реализацией; идентификатор профиля использования, определенного реализацией, должен отличаться от идентификаторов языковых профилей использования.
ПРИМЕЧАНИЯ
36 Ограничения, предназначенные для облегчения создания эффективных систем выполнения задач, определены в D.7. Ограничения, предназначенные для использования при создании систем высокой надежности, определены в H.4.
37 Реализация должна обеспечивать соблюдение ограничений в тех случаях, когда это требуется, даже если она не использует ограничения с точки зрения эффективности.