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