Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

Е.2.2 Библиотечные модули удаленных типов

Библиотечный модуль удаленных типов поддерживает определение типов, предназначенных для использования в обмене данными между активными разделами.
Абзацы 2 и 3 были перемещены в Приложение J, «Устаревшие функции».

Правила допустимости

Когда аспект библиотечного модуля (см. 13.1.1) Remote_Types библиотечного модуля имеет значение True, этот библиотечный модуль является библиотечным модулем удаленных типов. Для такого библиотечного модуля действуют следующие ограничения:
  • он должен быть предварительно вычисляемым;
  • он должен зависеть семантически только от объявленных чистых library_itemов, общих пассивных библиотечных модулей, других библиотечных модулей удаленных типов или предварительно вычисленных обычных библиотечных модулей, которые упоминаются только в частных секциях с ключевым словом with;
  • он не должен содержать объявления каких-либо переменных в видимой части библиотечного модуля;
  • полный вид каждого типа, объявленного в видимой части библиотечного модуля и имеющего доступные атрибуты потока, должен поддерживать внешнюю передачу (см. 13.13.2).
Именованный тип доступа, объявленный в видимой части библиотечного модуля удаленных типов или библиотечного модуля удаленного вызова, называется типом удаленного доступа. Такой тип должен быть:
  • типом доступа к подпрограмме, или
  • общим типом доступа, который обозначает общедоступный ограниченный частный тип, общедоступный ограниченный интерфейсный тип или общедоступное частное расширение, все предки которых являются либо частными расширениями, ограниченными интерфейсными типами, либо ограниченными частными типами.
Тип, производный от типа удаленного доступа, также является типом удаленного доступа.
Тип удаленного доступа к подпрограмме не должен быть асинхронным (см. 9.5).
Следующие ограничения применяются к использованию типа удаленного доступа к подпрограмме:
  • Значение типа удаленного доступа к подпрограмме должно преобразовываться только к другому (соответствующему по подтипу) типу удаленного доступа к подпрограмме;
  • Префикс prefix атрибута доступа attribute_reference, который возвращает значение типа удаленного доступа к подпрограмме, должен статически обозначать подпрограмму удаленного вызова (соответствующую по подтипу).
Следующие ограничения применяются к использованию типа удаленного доступа к общедоступному типу:
  • Первичные подпрограммы соответствующего конкретного типа должны иметь параметры доступа только если они являются управляющими формальными параметрами. Первичные функции соответствующего конкретного типа должны иметь только результат доступа, если он является управляющим результатом доступа. Каждый неуправляющий формальный параметр и тип неуправляющего результата должен поддерживать внешнюю передачу (см. 13.13.2);
  • Соответствующий конкретный тип не должен иметь первичную процедуру с аспектом Synchronization, если synchronization_kind не задан как Optional (см. 9.5);
  • Значение типа удаленного доступа к общедоступному типу должно быть явно преобразовано только к другому типу удаленного доступа к общедоступному типу;
  • Значение типа удаленного доступа к общедоступному типу должно быть разыменовано (или неявно преобразовано в анонимный тип доступа) только в рамках вызова диспетчеризации к первичной операции назначенного типа, где значение обозначает управляемый операнд вызова (см. E.4, «Вызовы удаленных подпрограмм»);
  • Значение управляющего результата доступа для первичной функции с управляемыми операндами соответствующего конкретного типа должно быть либо явно преобразовано в тип удаленного доступа к общедоступному типу, либо быть частью вызова диспетчеризации, где значение обозначает управляемый операнд вызова;
  • Атрибут Storage_Pool не определен для типа удаленного доступа к общедоступному типу; ожидаемый тип для allocator не должен быть типом удаленного доступа к общедоступному типу. Тип удаленного доступа к общедоступному типу не должен быть фактическим параметром для формального типа доступа в генерике. Атрибут Storage_Size типа удаленного доступа к общедоступному типу возвращает 0. Аспекты Storage_Pool и Storage_Size не должны быть заданы для типа удаленного доступа к общедоступному типу.

Ошибочное выполнение

Выполнение считается ошибочным, если какая-либо операция (кроме инициализации или завершения объекта) изменяет значение постоянного объекта, объявленного в видимой части пакета удаленных типов.
ПРИМЕЧАНИЕ 1 Библиотечный модуль удаленных типов необязательно чистый, и определяемые им типы могут включать уровни косвенности, реализованные с помощью типов доступа. Пользовательские атрибуты Read и Write (см. 13.13.2) обеспечивают отправку значений такого типа между активными разделами, при этом Write производит маршаллинг представления, а Read — размаршаллинг любых уровней косвенности.
ПРИМЕЧАНИЕ 2 Значение типа удаленного доступа к ограниченному интерфейсу общедоступного типа может обозначать объект не ограниченного типа, производного от интерфейса.
ПРИМЕЧАНИЕ 3 Тип удаленного доступа может обозначать общедоступный синхронизированный, защищенный или интерфейсный тип задачи.


Spec-Zone.ru

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