Справочник по Ada 2005
10.1.5 Предикаты и программные модули
В этом подпункте рассматриваются предикаты, относящиеся к программным модулям, библиотечным модулям и компиляциям.
Правила разрешения имен
Определенные предикаты являются предикатными инструкциями программных модулей. Имя, используемое в качестве аргумента предиката программного модуля, должно разрешаться таким образом, чтобы обозначать объявления или переименования одного или нескольких программных модулей, которые встречаются непосредственно в области объявления или в компиляции, где непосредственно расположен данный предикат, или оно должно разрешаться для обозначения объявления непосредственно окружающего программного модуля (если таковой имеется); предикат применяется к обозначенному(ым) программному модулю(ям). Если в качестве аргументов не указаны имена, предикат применяется к непосредственно окружающему программному модулю.
Правила легальности
Предикат программного модуля должен быть размещен в одном из следующих мест:
- В месте единицы_компиляции, в этом случае предикат должен следовать непосредственно в той же компиляции (за исключением других предикатов) после объявления_модуля_библиотеки, являющегося объявлением_подпрограммы, объявлением_подпрограммы_с_параметром_типа или инстанциацией_параметра_типа, и предикат должен иметь аргументом имя, обозначающее это объявление.
- Непосредственно внутри видимой части программного модуля и перед любым вложенным объявлением (но не внутри формальной части параметра типа), в этом случае аргумент, если он есть, должен быть прямым_именем, который обозначает объявление непосредственно окружающего программного модуля.
- В месте объявления, отличного от первого, части объявления или объявления программного модуля, в этом случае предикат должен иметь аргумент, который должен быть прямым_именем, обозначающим один или несколько из следующих (и ничего другого): объявление_подпрограммы, объявление_подпрограммы_с_параметром_типа или инстанциация_параметра_типа той же части объявления или объявления программного модуля.
Некоторые предикат программного модуля определены как предикаты модулей библиотеки. Имя, если таковое имеется, в предикате модуля библиотеки должно обозначать объявление модуля библиотеки.
Статическая семантика
Предикат модуля библиотеки, который применяется к обобщенному модулю, не применяется к его экземплярам, если для предиката нет специального правила, определяющего обратное.
Правила после компиляции
Определенные предикаты определяются как предикаты конфигурации; они должны появляться перед первой единицей_компиляции компиляции. Они обычно используются для выбора параметра, относящегося к всему разделу или системе. Предикат применяется ко всем единицам_компиляции, появляющимся в компиляции, если таковые отсутствуют, в противном случае он применяется ко всем будущим единицам_компиляции, скомпилированным в ту же среду.
Разрешения для реализации
Реализация может потребовать, чтобы предикат конфигурации, выбирающий параметры для всего раздела или системы, был скомпилирован, когда среда не содержит элементов_библиотеки, кроме тех, что относятся к предопределенной среде. В этом случае реализация все равно должна принимать предикат конфигурации в отдельных компиляциях, которые подтверждают первоначально выбранные параметры для всего раздела или системы.
Рекомендации для реализации
При применении к обобщенному модулю предикат программного модуля, не являющийся предикатом модуля библиотеки, должен применяться к каждому экземпляру обобщенного модуля, для которого нет переопределяющего предиката, примененного непосредственно к экземпляру.