Справочник по Ada 95
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 с соответствующим именем. Этот пакет должен содержать любые объявления, которые могут быть полезными для взаимодействия с языком (реализацией), представленным данной конвенцией. Любые объявления, полезные для взаимодействия с любым языком на данной архитектуре аппаратного обеспечения, должны предоставляться непосредственно в Interfaces.
Реализация, поддерживающая интерфейс к C, COBOL или Fortran, должна предоставить соответствующий пакет или пакеты, описанные в следующих разделах.