Spec-Zone.ru › Ada 95
Справочник по Ada 95

10.1.4 Процесс компиляции

Каждый модуль компиляции, предоставленный компилятору, компилируется в контексте окружения declarative_part (или просто окружения), которое представляет собой концептуальную declarative_part, образующую внешнюю область объявления в контексте любой компиляции. Во время выполнения окружение образует declarative_part тела задачи окружения раздела (см. 10.2, «Выполнение программы»).
Элементы объявления окружения являются library_items, расположенными в порядке, исключающем обратные семантические зависимости. Каждый включенный подмодуль заменяет соответствующий заглушку. Правила видимости применяются так, как если бы окружение было самой внешней областью объявления, за исключением того, что with_clause необходимы для видимости объявлений единиц библиотеки (см. 10.1.2).
Механизмы создания окружения и добавления/замены модулей компиляции внутри окружения определяются реализацией.

Правила разрешения имен

Если library_unit_body, являющийся subprogram_body, предоставляется компилятору, он интерпретируется только как завершение, если library_unit_declaration с тем же defining_program_unit_name уже существует в окружении для подпрограммы, отличной от экземпляра обобщенной подпрограммы или для обобщенной подпрограммы (даже если профиль тела не соответствует типу объявления); в противном случае subprogram_body интерпретируется как объявление и тело подпрограммы библиотеки.

Правила легальности

При компиляции модуля компиляции все модули компиляции, от которых он семантически зависит, должны уже существовать в окружении; набор этих модулей должен быть совместимым в том смысле, что новый модуль компиляции не должен семантически зависеть (прямо или косвенно) от двух разных версий одного и того же модуля, ни от более ранней версии самого себя.

Разрешения реализации

Реализация может потребовать, чтобы модуль компиляции был легитимным перед его вставкой в окружение.
При добавлении в окружение модуля компиляции, объявляющего или переименовывающего единицу библиотеки, реализация может удалить из окружения любое существующее library_item с тем же defining_program_unit_name. При добавлении модуля компиляции, являющегося подмодулем или телом единицы библиотеки, реализация может удалить из окружения любую предыдущую версию того же модуля. При удалении данного модуля компиляции из окружения, реализация также может удалить любой модуль компиляции, семантически зависящий от данного.
Если данный модуль компиляции содержит тело подпрограммы, к которой применяется pragma Inline, реализация также может удалить любой модуль компиляции, содержащий вызов этой подпрограммы.
ПРИМЕЧАНИЯ
5 Правила языка соблюдаются в границах компиляции и модулей компиляции, так же, как и внутри отдельного модуля компиляции.
6 Реализация может поддерживать концепцию библиотеки, которая содержит library_items. Если поддерживается несколько библиотек, реализация должна определить, как создается одно окружение при представлении модуля компиляции компилятору. Конфликты имен между различными библиотеками могут быть разрешены путем обработки каждой библиотеки как корня иерархии дочерних единиц библиотеки.
7 Модуль компиляции, содержащий экземпляр отдельно скомпилированной обобщенной единицы, не зависит семантически от тела обобщенной единицы. Поэтому замена обобщенного тела в окружении не приводит к удалению модуля компиляции, содержащего экземпляр.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API