Spec-Zone.ru › Ada 2005
Справочное руководство по Ada 2005

10.2 Выполнение программы

Программа Ada состоит из набора разделов, которые могут выполняться параллельно друг с другом, возможно, в отдельном адресном пространстве и, возможно, на отдельном компьютере.

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

Раздел — это программа или часть программы, которая может быть вызвана извне реализации Ada. Например, на многих системах раздел может быть исполняемым файлом, созданным системным компоновщиком. Пользователь может явно назначить библиотечные модули разделу. Назначение выполняется определённым реализацией способом. Модули, включённые в раздел, — это модули явно назначенных библиотечных модулей, а также другие модули, необходимые этим библиотечным модулям. Модули, необходимые данному модулю, определяются следующим образом (если не указано иное через реализационно-зависимый pragma или каким-либо иным реализационно-зависимым способом):
  • Модуль нуждается в себе;
  • Если модуль нужен, то нужны и все модули, от которых он зависит семантически;
  • Если объявление_библиотечного_модуля нужно, то также нужен любой соответствующий тело_библиотечного_модуля;
  • Если модуль со «стяжками» нужен, то нужны все соответствующие подмодули;
  • Если необходимо неявное объявление ограниченного представления библиотечного пакета, то необходимо и явное объявление библиотечного пакета.
Пользователь может необязательно назначить (с помощью определяемого реализацией способа) один подпрограмму в качестве главной подпрограммы для раздела. Главная подпрограмма, если она указана, должна быть подпрограммой.
Каждый раздел имеет анонимную задачу среды, которая является неявной внешней задачей, чье выполнение детализирует элемент_библиотеки части среды декларативная_часть, а затем вызывает главную подпрограмму, если она есть. Выполнение раздела — это выполнение его задач.
Порядок детализации библиотечных модулей определяется в первую очередь зависимостями детализации. Существует зависимость детализации данного элемента_библиотеки от другого, если данный элемент_библиотеки или любой из его подмодулей семантически зависит от другого элемента_библиотеки. Кроме того, если данный элемент_библиотеки или любой из его подмодулей имеет pragma Elaborate или Elaborate_All, который называет другой библиотечный модуль, то существует зависимость детализации данного элемента_библиотеки от тела другого библиотечного модуля и, только для Elaborate_All, от каждого элемента_библиотеки, необходимых для объявления другого библиотечного модуля.
Задача среды для раздела имеет следующую структуру:
задача Environment_Task;
задача тело Environment_Task is
... (1) -- Часть среды декларативная_часть
-- (то есть последовательность элементов_библиотеки) находится здесь.
begin
... (2) -- Вызов главной подпрограммы, если она есть.
end Environment_Task;
Декларативная часть среды (1) — это последовательность элементов декларативных_элементов, состоящая из копий элементов_библиотеки, включенных в раздел. Порядок детализации элементов библиотеки — это порядок, в котором они появляются в декларативной части среды:
  • Порядок всех включённых элементов_библиотеки такой, что нет обратных зависимостей детализации.
  • Любое включенное объявление_библиотечного_модуля, к которому применяется pragma Elaborate_Body, немедленно следует за его телом_библиотечного_модуля, если он включён.
  • Все элементы_библиотеки, объявленные чистыми, появляются перед любыми, которые не объявлены чистыми.
  • Все предварительно детализированные элементы_библиотеки появляются перед любыми, которые не предварительно детализированы.
Должен быть общий порядок элементов_библиотеки, который подчиняется вышеуказанным правилам. В противном случае порядок определяется реализацией.
Полные расширенные имена библиотечных модулей и подмодулей, включенных в данный раздел, должны быть различными.
Последовательность инструкций последовательность_инструкций задачи среды (см. (2) выше) состоит из:
  • Вызов главной подпрограммы, если у раздела есть такая. Если главная подпрограмма имеет параметры, они передаются; откуда берутся фактические значения, определяется реализацией. Что происходит с результатом главной функции, также определяется реализацией.
или:
  • Инструкция пустая_инструкция, если нет главной подпрограммы.
Механизмы построения и запуска разделов определяются реализацией. Они могут быть объединены в одну операцию, как, например, при динамической компоновке или системах «загрузка-и-выполнение».

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

Выполнение программы состоит из выполнения набора разделов. Более подробные сведения определяются реализацией. Выполнение раздела начинается с выполнения его задачи среды, заканчивается, когда задача среды завершается, и включает в себя выполнение всех задач раздела. Выполнение (неявной) тело_задачи задачи среды служит главным элементом для всех других задач, созданных в ходе выполнения раздела. Когда задача среды завершается (обычно или аномально), она ожидает завершения всех таких задач и затем завершает любые оставшиеся объекты раздела.

Ограниченные (времени выполнения) ошибки

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

Требования к реализации

Реализация должна гарантировать, что все модули, включённые в раздел, согласованы друг с другом и являются законными в соответствии с правилами языка.

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

Тип раздела, описанный в этом разделе, известен как активный раздел. Реализация разрешается поддерживать другие типы разделов с семантикой, определяемой реализацией.
Реализация может ограничить типы подпрограмм, поддерживаемых в качестве главных подпрограмм. Однако, реализация обязана поддерживать все главные подпрограммы, которые являются общедоступными безпараметровыми библиотечными процедурами.
Если задача среды завершается аномально, реализация может прервать любые зависимые задачи.
ПРИМЕЧАНИЯ
8 Реализация может предоставить механизм(ы) межраздельного взаимодействия через специальные пакеты и плейсмаркер. Стандартные плейсмаркеры для распределения и методы указания межраздельного взаимодействия определены в Приложении E, «Распределённые системы». Если такие механизмы не предоставлены, каждый раздел изолирован от всех других и ведёт себя как программа сама по себе.
9 Разделы не обязаны выполняться в отдельных адресных пространствах. Например, реализация может поддерживать динамическую компоновку через концепцию раздела.
10 Порядок детализации элементов_библиотеки, который согласуется с частичным порядком, определённым выше, не всегда гарантирует, что каждое тело_библиотечного_модуля детализируется до любого другого модуля, детализация которого требует, чтобы тело_библиотечного_модуля уже было детализировано. (В частности, нет требования, чтобы тело библиотечного модуля было детализировано как можно скорее после детализации объявления_библиотечного_модуля, если не используются плейсмаркеры в подразд. 10.2.1).
END_OF_DOCUMENT_MARKER
11 Разделитель (активный или любой другой) может не иметь основную подпрограмму. В таком случае вся работа, выполняемая разделителем, будет выполняться путем разработки различных библиотечных элементов и задачами, созданными этой разработкой. Пассивные разделители, которые не могут иметь основные подпрограммы, определены в Приложении E, «Распределённые системы».


Spec-Zone.ru

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