Справочник по Ada (Ada 2022)
B.2 Пакеты интерфейсов
Пакет Interfaces является родителем нескольких библиотек пакетов, которые объявляют типы и другие сущности, полезные для взаимодействия с внешними языками. Он также содержит некоторые типы, определяемые реализацией, которые полезны для нескольких языков (в частности, для взаимодействия с языком ассемблера).
Статическая семантика
Библиотечный пакет Interfaces имеет следующее скелетное объявление:
package Interfaces
with Pure is
with Pure is
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, должна предоставить соответствующий пакет или пакеты, описанные в следующих подпунктах.