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

10.2.1 Управление этапом разработки

Этот подпункт определяет директивы, которые помогают управлять порядком разработки library_itemов.

Синтаксис

Форма директивы pragma Preelaborate выглядит следующим образом:
pragma Preelaborate[(library_unit_name)];
Директива pragma Preelaborate является директивой для модуля библиотеки.

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

Элемент, подлежащий разработке, может быть разработан до основного цикла, если его разработка не выполняет ни одного из следующих действий:
  • Выполнение оператора, отличного от оператора null_statement.
  • Вызов подпрограммы, отличной от статической функции.
  • Вычисление primary, являющегося name объекта, если name не является статическим выражением или статически не обозначает дискриминант содержащего типа.
  • Создание объекта с инициализацией по умолчанию (включая компонент) потомка частного типа, частного расширения, контролируемого типа, типа задачи или защищенного типа с entry_declarationами; аналогично вычисление extension_aggregate с subtype_mark предка, обозначающим подтип такого типа.
Тело обобщенного модуля может быть разработано до основного цикла только если разработка соответствующего тела экземпляра не выполнит ни одного из этих действий, предполагая, что фактический параметр для каждого формального частного типа (или расширения) является частным типом (или расширением), а фактический параметр для каждой формальной подпрограммы является подпрограммой, определенной пользователем.
Если pragma Preelaborate (или pragma Pure — см. ниже) относится к модулю библиотеки, то он предварительно разрабатывается. Если модуль библиотеки предварительно разработан, то его объявление, если оно есть, и тело, если оно есть, разрабатываются до всех непредварительно разработанных library_itemов раздела. Объявление и тело предварительно разработанного модуля библиотеки, и все подмодули, которые разрабатываются как часть разработки модуля библиотеки, должны быть предварительно разработаемыми. Помимо мест, где обычно применяются правила легальности (см. 12.3), это правило применяется также в частной части экземпляра обобщенного модуля. Кроме того, все модули компиляции предварительно разработанного модуля библиотеки должны зависеть семантически только от модулей компиляции других предварительно разработанных модулей библиотеки.

Рекомендации по реализации

В реализации, тип, объявленный в предварительно разработанном пакете, должен иметь такое же представление при каждой разработке данной версии пакета, независимо от того, происходят ли разработки в разных выполнениях одной программы или в выполнениях разных программ или разделов, включающих данную версию.

Синтаксис

Форма директивы pragma Pure выглядит следующим образом:
pragma Pure[(library_unit_name)];
Директива pragma Pure является директивой для модуля библиотеки.

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

Чистый library_item — это предварительно разрабатываемый library_item, не содержащий объявления никакой переменной или именованного типа доступа, кроме как внутри подпрограммы, обобщенной подпрограммы, модуля задачи или модуля защищенного типа.
Директива pragma Pure используется для объявления того, что модуль библиотеки является чистым. Если директива pragma Pure относится к модулю библиотеки, то его модули компиляции должны быть чистыми, и они должны зависеть семантически только от модулей компиляции других модулей библиотеки, которые объявлены чистыми.

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

Если модуль библиотеки объявлен чистым, то реализация имеет право опустить вызов подпрограммы библиотечного уровня в модуле библиотеки, если результаты не нужны после вызова. Аналогично, она может опустить такой вызов и просто повторно использовать результаты, полученные ранее вызовом той же подпрограммы, при условии, что ни один из параметров не является типом ограниченного типа, и адреса и значения всех параметров по ссылке, а также значения всех параметров по копированию, совпадают с теми, что были при предыдущем вызове. Это разрешение действует даже если подпрограмма производит другие побочные эффекты при вызове.

Синтаксис

Форма директивы pragma Elaborate, Elaborate_All или Elaborate_Body выглядит следующим образом:
pragma Elaborate(library_unit_name{, library_unit_name});
pragma Elaborate_All(library_unit_name{, library_unit_name});
pragma Elaborate_Body[(library_unit_name)];
Директива pragma Elaborate или Elaborate_All разрешена только в context_clause.
Директива pragma Elaborate_Body является директивой для модуля библиотеки.

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

Если директива pragma Elaborate_Body относится к объявлению, то объявление требует завершения (тела).

Статическая семантика

Директива pragma Elaborate указывает, что тело указанного модуля библиотеки разрабатывается перед текущим library_item. Директива pragma Elaborate_All указывает, что каждый library_item, необходимый для объявления указанного модуля библиотеки, разрабатывается перед текущим library_item. Директива pragma Elaborate_Body указывает, что тело модуля библиотеки разрабатывается непосредственно после его объявления.
ПРИМЕЧАНИЯ
12 Предварительно разработанный модуль библиотеки может иметь непредварительно разработанных потомков.
13 Модуль библиотеки, объявленный чистым, может иметь нечистых потомков.


Spec-Zone.ru

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