Справочник по Ada 2012
B.2 Пакеты-интерфейсы
Пакет-интерфейс является родителем нескольких пакетов библиотек, которые объявляют типы и другие сущности, полезные для взаимодействия с иностранными языками. Он также содержит некоторые типы, определяемые реализацией, которые полезны для более чем одного языка (особенно для взаимодействия с ассемблерным языком).
Статическая семантика
Пакет библиотеки Interfaces имеет следующее скелетное объявление:
package Interfaces is
pragma Pure(Interfaces);
type Integer_n is range -2**(n-1) .. 2**(n-1) - 1; --2's complement
type Unsigned_n is mod 2**n;
function Shift_Left (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Shift_Right (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Shift_Right_Arithmetic (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Rotate_Left (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Rotate_Right (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
...
end Interfaces;
return Unsigned_n;
function Shift_Right (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Shift_Right_Arithmetic (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Rotate_Left (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Rotate_Right (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
...
end Interfaces;
Требования к реализации
Реализация должна предоставить следующие объявления во видимой части пакета Interfaces:
- Целочисленные типы со знаком и по модулю из n бит, если это поддерживается целевой архитектурой, для каждого n, которое не меньше размера элемента хранения и является множителем размера слова. Имена этих типов имеют вид Integer_n для типов со знаком и Unsigned_n для типов по модулю;
- Для каждого такого типа по модулю в Interfaces, подпрограммы сдвига и вращения, как указано в объявлении Interfaces выше. Эти подпрограммы являются встроенными. Они работают на основе битов, используя двоичное представление значения операндов для получения двоичного представления результата. Параметр Amount указывает количество битов, на которое необходимо сдвинуть или повернуть. При сдвиге вводятся нулевые биты, за исключением случая Shift_Right_Arithmetic, где вводятся единичные биты, если Value составляет по крайней мере половину модуля.
- Типы с плавающей точкой, соответствующие каждому формату с плавающей точкой, полностью поддерживаемому аппаратным обеспечением.
Разрешения реализации
Реализация может предоставить определяемые реализацией модули библиотек, которые являются дочерними по отношению к Interfaces, и может добавить объявления во видимую часть Interfaces в дополнение к определенным выше.
Дочерний пакет пакета Interfaces с именем соглашения может быть предоставлен независимо от того, поддерживается ли соглашение аспектом Convention, и наоборот. Такой дочерний пакет должен содержать все объявления, которые могут быть полезны для взаимодействия с языком (реализацией), представленным соглашением. Все объявления, полезные для взаимодействия с любым языком на данной архитектуре аппаратного обеспечения, должны быть предоставлены непосредственно в Interfaces.
Рекомендации по реализации
Этот абзац был удален.
Реализация, поддерживающая интерфейс к C, COBOL или Fortran, должна предоставить соответствующий пакет или пакеты, описанные в следующих подпунктах.