13.9. СВЯЗЬ С ДРУГИМИ ЯЗЫКАМИ

Из программы, написанной на языке Ада, может быть вызвана подпрограмма, написанная на другом языке; все связи с этими подпрограммами обеспечиваются через параметры и результаты функций. Для каждой такой подпрограммы должна быть задана следующая прагма:

pragma INTERFACE (имя -языка, имя- подпрограммы};

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

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

Пример:

package FORT_LIB is   function SORT (X : FLOAT) return FLOAT;   function EXP (X : FLOAT) return FLOAT;private   pragma INTERFACE(FORTRAN, SORT);   pragma INTERFACE(FORTRAN, EXP);end FORT_LIB;

Примечание. Соглашения, использованные в других языковых процессорах, которые вызывают Ада-программы, не являются частью определения языка Ада. Эти соглашения должны быть определены в описании других языковых процессоров.

Прагма INTERFACE не определена для настраиваемых подпрограмм. Ссылки: библиотечный модуль 10.1, вызов подпрограммы 6.4, должен 1.6, допустимый 1.6, имя 4.1, компилируемый модуль 10.1, описание 3.1, описание подпрограммы 6.1, параметр подпрограммы 6.2, подпрограмма 6, прагма 2.8, раздел описаний 3.9, результат функции 6.5, след тела 10.2, совмещенная подпрограмма 6.6, спецификация пакета 7.1, тело подпрограммы 6.3, элемент описания 3.9.