Справочник Ada 2005
E.2.3 Библиотечные модули интерфейса удалённых вызовов
Библиотечный модуль интерфейса удалённых вызовов может использоваться в качестве интерфейса для удалённых процедурных вызовов (RPC) (или удалённых вызовов функций) между активными разделами.
Синтаксис
Форма директивы Remote_Call_Interface следующая:
pragma Remote_Call_Interface[(имя_модуля_библиотеки_имя)];
Форма директивы All_Calls_Remote следующая:
pragma All_Calls_Remote[(имя_модуля_библиотеки_имя)];
Директива All_Calls_Remote относится к модулю библиотеки.
Правила допустимости
Интерфейс удалённого вызова (RCI) — это библиотечный модуль, к которому применяется директива Remote_Call_Interface. Подпрограмма, объявленная в видимой части такого библиотечного модуля или объявленная таким библиотечным модулем, называется удалённой подпрограммой.
Объявление модуля RCI библиотеки должно быть предварительно обрабатываемым (см. 10.2.1), и должно зависеть семантически только от объявленных чистых, общих пассивных, удалённых типов или других библиотечных модулей интерфейса удалённых вызовов.
Кроме того, на модуль RCI библиотеки распространяются следующие ограничения:
- его видимая часть не должна содержать объявление переменной;
- его видимая часть не должна содержать объявление ограниченного типа;
- его видимая часть не должна содержать вложенного объявления_шаблона;
- он не должен быть, и его видимая часть не должна содержать, подпрограмму, к которой применяется директива Inline;
- он не должен быть, и его видимая часть не должна содержать, объявление подпрограммы (или доступа к подпрограмме), профиль которой имеет параметр доступа или параметр типа, который не поддерживает внешнюю потоковую передачу (см. 13.13.2);
- любой публичный дочерний элемент библиотечного модуля должен быть библиотечным модулем интерфейса удалённых вызовов.
Если директива All_Calls_Remote относится к библиотечному модулю, этот модуль должен быть интерфейсом удалённого вызова.
Правила после компиляции
Модуль библиотеки интерфейса удалённого вызова должен быть назначен не более чем одному разделу заданной программы. Модуль библиотеки интерфейса удалённого вызова, родитель которого также является RCI библиотечным модулем, должен быть назначен только тому же разделу, что и его родитель.
Несмотря на правило, указанное в 10.2, модуль компиляции в данном разделе, семантически зависящий от объявления модуля RCI библиотеки, нуждается (в смысле 10.2) только в объявлении модуля RCI библиотеки, а не в теле, для включения в тот же раздел. Поэтому тело модуля RCI библиотеки включается только в раздел, к которому явно назначен модуль RCI библиотеки.
Требования к реализации
Если директива All_Calls_Remote применяется к данному библиотечному модулю RCI, то реализация должна маршрутизировать любой вызов подпрограммы модуля RCI извне области объявления модуля через Подсистему связи между разделами (PCS); см. E.5. Вызовы таких подпрограмм внутри области объявления модуля определены как локальные и не должны проходить через PCS.
Разрешения реализации
Реализация может не поддерживать директиву Remote_Call_Interface или директиву All_Calls_Remote. В качестве альтернативы RPC может поддерживаться явная коммуникация на основе сообщений между активными разделами.