Руководство по Ada (Ada 2022)
13.12.1 Явно определенные ограничения и профили языка
Статическая семантика
Следующие ограничение_идентификаторы определены языком (дополнительные ограничения определены в Приложениях специализированных потребностей):
No_Implementation_Aspect_Specifications
Нет определенных реализацией аспектов, указанных в спецификации_аспекта. Это ограничение относится только к текущей компиляции или среде, а не ко всему разделу.
No_Implementation_Attributes
Нет определенных реализацией атрибутов. Это ограничение относится только к текущей компиляции или среде, а не ко всему разделу.
No_Implementation_Identifiers
Нет имен использования, обозначающих объявления с идентификаторами, определенными реализацией, которые встречаются в пакетах, определенных языком, или экземплярах языковых обобщенных пакетов. Такие идентификаторы могут возникать следующим образом:
Следующие пакеты и обобщенные пакеты, определенные языком, допускают идентификаторы, определенные реализацией:
пакет System (см. 13.7);
пакет Standard (см. A.1);
пакет Ada.Command_Line (см. A.15);
пакет Interfaces.C (см. B.3);
пакет Interfaces.C.Strings (см. B.3.1);
пакет Interfaces.C.Pointers (см. B.3.2);
пакет Interfaces.COBOL (см. B.4);
пакет Interfaces.Fortran (см. B.5);
Следующие пакеты, определенные языком, содержат только идентификаторы, определенные реализацией:
пакет System.Machine_Code (см. 13.8);
пакет Ada.Directories.Information (см. A.16);
вложенные пакеты реализации контейнеров очереди (см. A.18.28-31);
пакет Interfaces (см. B.2);
пакет Ada.Interrupts.Names (см. C.3.2).
Для пакета Standard Standard.Long_Integer и Standard.Long_Float считаются идентификаторами, определенными языком, но идентификаторы, такие как Standard.Short_Short_Integer, считаются идентификаторами, определенными реализацией.
Это ограничение относится только к текущей компиляции или среде, а не ко всему разделу.
No_Implementation_Pragmas
Нет псевдокоманд или аргументов псевдокоманд, определенных реализацией. Это ограничение относится только к текущей компиляции или среде, а не ко всему разделу.
No_Implementation_Units
В описании_контекста нет упоминания о каких-либо подпакетах, являющихся подпакетами пакетов Ada, Interfaces или System, определенных реализацией. Это ограничение относится только к текущей компиляции или среде, а не ко всему разделу.
No_Obsolescent_Features
Нет использования языковых функций, определенных в Приложении J. Реализацией определяется, обнаруживаются ли в этом ограничении использования переименований из J.1 и псевдокоманд из J.15. Это ограничение относится только к текущей компиляции или среде, а не ко всему разделу.
Следующие ограничение_параметр_идентификаторы определены языком:
No_Dependence
Указывает на библиотечную единицу, на которую нет семантических зависимостей.
No_Specification_of_Aspect
No_Use_Of_Attribute
No_Use_Of_Pragma
Определяет псевдокоманду, которая не должна использоваться.
No_Unrecognized_Aspects
Нет спецификаций_аспекта с нераспознанным аспект_идентификатором. Это ограничение относится только к текущей компиляции или среде, а не ко всему разделу.
No_Unrecognized_Pragmas
Нет псевдокоманд с нераспознанным идентификатором псевдокоманды. Это ограничение относится только к текущей компиляции или среде, а не ко всему разделу.
Правила легальности
Аргумент ограничение_параметр_аргумент ограничения No_Dependence должен быть именем; имя должно иметь вид полного развернутого имени библиотечной единицы, но может быть именем, которому в настоящее время нет соответствующей единицы в среде.
Аргумент ограничение_параметр_аргумент ограничения No_Specification_of_Aspect должен быть идентификатором; это идентификатор, специфичный для псевдокоманды (см. 2.8), и он не обозначает никакого объявления.
Аргумент ограничение_параметр_аргумент ограничения No_Use_Of_Attribute должен быть идентификатором или одним из зарезервированных слов Access, Delta, Digits, Mod или Range; это идентификатор, специфичный для псевдокоманды.
Аргумент ограничение_параметр_аргумент ограничения No_Use_Of_Pragma должен быть идентификатором или зарезервированным словом Interface; это идентификатор, специфичный для псевдокоманды.
Правила после компиляции
Никакой единице компиляции, включенной в раздел, не должна быть семантически зависимой от библиотечной единицы, идентифицированной именем ограничения No_Dependence.
Статическая семантика
Следующий профиль_идентификатор определен языком:
No_Implementation_Extensions
Для профиля использования No_Implementation_Extensions не должно быть профиль_связь_аргумент_псевдокомандыов.
Профиль использования No_Implementation_Extensions эквивалентен следующим ограничениям:
No_Implementation_Aspect_Specifications,
No_Implementation_Attributes,
No_Implementation_Identifiers,
No_Implementation_Pragmas,
No_Implementation_Units.
No_Implementation_Attributes,
No_Implementation_Identifiers,
No_Implementation_Pragmas,
No_Implementation_Units.