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

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

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

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

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

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

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

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

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

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

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

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

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


Spec-Zone.ru

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