Справочник по Ada 2012
3.11.1 Завершение объявлений
Объявления иногда состоят из двух частей. Объявление, требующее второй части, считается требующим завершения. Вторая часть называется завершением объявления (и объявленного объекта) и представляет собой другое объявление, тело или псевдоним. Тело — это тело, тело_входной_точки, объявление_пустой_процедуры или объявление_функции_выражения, завершающие другое объявление, или переименование-как-тело (см. 8.5.4).
Правила разрешения имен
Конструкцию, которая может быть завершением, интерпретируют как завершение предыдущего объявления только если:
- Объявление и завершение находятся непосредственно в той же области объявления;
- Определяющее имя или имя_определяемой_программы в завершении совпадает с именем в объявлении, или, в случае псевдонима, псевдоним применяется к объявлению;
- Если объявление перегружаемо, то завершение либо имеет тип-соответствующий профиль, либо является псевдонимом.
Правила легальности
Неявное объявление не должно иметь завершения. Для любого явного объявления, которое должно иметь завершение, должно быть соответствующее явное завершение, если только объявленный объект не импортирован (см. B.1).
Для данного объявления разрешено не более одного завершения. Дополнительные требования к завершениям представлены там, где определяется каждый вид завершения.
Тип считается полностью определенным в месте, которое находится после его полного определения типа (если оно есть) и после того, как все типы его подкомпонентов будут полностью определены. Тип должен быть полностью определен до того, как он будет заморожен (см. 13.14 и 7.3).
ПРИМЕЧАНИЯ
98 Завершения, в принципе, допускаются для любого вида явного объявления. Однако для некоторых видов объявления единственно допустимым завершением является определяемый реализацией псевдоним, и реализации не обязаны иметь такие псевдонимы.
99 Существуют правила, которые предотвращают преждевременное использование объявлений, имеющих соответствующее завершение. Проверки Elaboration_Checks в 3.11 предотвращают такие использования во время выполнения для подпрограмм, защищенных операций, задач и генерируемых модулей. Правила в 13.14, «Правила заморозки», предотвращают преждевременное использование других объектов, таких как частные типы и отложенные константы, во время компиляции.