Справочник Ada 95
E.2.3 Модули библиотеки интерфейса удалённых вызовов
Модуль библиотеки интерфейса удалённых вызовов может использоваться в качестве интерфейса для удалённых вызовов процедур (RPC) (или удалённых вызовов функций) между активными разделами.
Синтаксис
Форма директивы pragma Remote_Call_Interface такова:
pragma Remote_Call_Interface[(имя_модуля_библиотеки)];
Форма директивы pragma All_Calls_Remote такова:
pragma All_Calls_Remote[(имя_модуля_библиотеки)];
Директива pragma All_Calls_Remote является директивой для модуля библиотеки.
Правила легитимности
Интерфейс удалённого вызова (RCI) — это модуль библиотеки, к которому применяется директива Remote_Call_Interface. Подпрограмма, объявленная в видимой части такого модуля библиотеки или объявленная таким модулем, называется удалённой подпрограммой.
Объявление модуля библиотеки RCI должно быть предварительно проверяемым (см. 10.2.1) и должно зависеть семантически только от объявленных чистых, общих пассивных, удалённых типов или других модулей библиотеки интерфейса удалённых вызовов.
Кроме того, для модуля библиотеки RCI применяются следующие ограничения:
- его видимая часть не должна содержать объявления переменной;
- его видимая часть не должна содержать объявления ограниченного типа;
- его видимая часть не должна содержать вложенное объявление generic_declaration;
- он не должен быть и его видимая часть не должна содержать объявление подпрограммы, к которой применяется директива Inline;
- он не должен быть и его видимая часть не должна содержать объявление подпрограммы (или доступа к подпрограмме), профиль которой имеет параметр доступа или формальный параметр ограниченного типа, если этот ограниченный тип не имеет заданных пользователем атрибутов Read и Write;
- любой открытый дочерний элемент модуля библиотеки должен быть модулем библиотеки интерфейса удалённых вызовов.
Если директива 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.