Справочник по Ada 95
13.7 Пакет System
В каждой реализации существует библиотечный пакет System, включающий определения некоторых характеристик, зависящих от конфигурации.
Статическая семантика
Существует следующий пакет библиотеки, определяемый языком:
package System is
pragma Preelaborate(System);
type Name is implementation-defined-enumeration-type;
System_Name : constant Name := implementation-defined;
System_Name : constant Name := implementation-defined;
-- Зависимые от системы именованные числа:
Min_Int : constant := root_integer'First;
Max_Int : constant := root_integer'Last;
Max_Int : constant := root_integer'Last;
Max_Binary_Modulus : constant := implementation-defined;
Max_Nonbinary_Modulus : constant := implementation-defined;
Max_Nonbinary_Modulus : constant := implementation-defined;
Max_Base_Digits : constant := root_real'Digits;
Max_Digits : constant := implementation-defined;
Max_Digits : constant := implementation-defined;
Max_Mantissa : constant := implementation-defined;
Fine_Delta : constant := implementation-defined;
Fine_Delta : constant := implementation-defined;
Tick : constant := implementation-defined;
-- Объявления, относящиеся к хранению:
type Address is implementation-defined;
Null_Address : constant Address;
Null_Address : constant Address;
Storage_Unit : constant := implementation-defined;
Word_Size : constant := implementation-defined * Storage_Unit;
Memory_Size : constant := implementation-defined;
Word_Size : constant := implementation-defined * Storage_Unit;
Memory_Size : constant := implementation-defined;
-- Сравнение адресов:
function "<" (Left, Right : Address) return Boolean;
function "<="(Left, Right : Address) return Boolean;
function ">" (Left, Right : Address) return Boolean;
function ">="(Left, Right : Address) return Boolean;
function "=" (Left, Right : Address) return Boolean;
-- function "/=" (Left, Right : Address) return Boolean;
-- "/=" неявно определен
pragma Convention(Intrinsic, "<");
... -- и так далее для всех подпрограмм, определённых языком в этом пакете
function "<" (Left, Right : Address) return Boolean;
function "<="(Left, Right : Address) return Boolean;
function ">" (Left, Right : Address) return Boolean;
function ">="(Left, Right : Address) return Boolean;
function "=" (Left, Right : Address) return Boolean;
-- function "/=" (Left, Right : Address) return Boolean;
-- "/=" неявно определен
pragma Convention(Intrinsic, "<");
... -- и так далее для всех подпрограмм, определённых языком в этом пакете
-- Другие объявления, зависящие от системы:
type Bit_Order is (High_Order_First, Low_Order_First);
Default_Bit_Order : constant Bit_Order;
type Bit_Order is (High_Order_First, Low_Order_First);
Default_Bit_Order : constant Bit_Order;
-- Объявления, связанные с приоритетами (см. D.1):
subtype Any_Priority is Integer range implementation-defined;
subtype Priority is Any_Priority range Any_Priority'First ..
implementation-defined;
subtype Interrupt_Priority is Any_Priority range Priority'Last+1 ..
Any_Priority'Last;
subtype Any_Priority is Integer range implementation-defined;
subtype Priority is Any_Priority range Any_Priority'First ..
implementation-defined;
subtype Interrupt_Priority is Any_Priority range Priority'Last+1 ..
Any_Priority'Last;
Default_Priority : constant Priority :=
(Priority'First + Priority'Last)/2;
(Priority'First + Priority'Last)/2;
private
... -- не определено языком
end System;
... -- не определено языком
end System;
Name — это перечислимый подтип. Значения типа Name — это имена альтернативных конфигураций машины, обрабатываемых реализацией. System_Name представляет текущую конфигурацию машины.
Именные числа Fine_Delta и Tick имеют тип universal_real; остальные — тип universal_integer.
Значения именованных чисел:
- Min_Int
- Наименьшее (наименее положительное) значение, допустимое для выражений типа signed_integer_type_definition.
- Max_Int
- Наибольшее (наибольшее положительное) значение, допустимое для выражений типа signed_integer_type_definition.
- Max_Binary_Modulus
- Степень двойки, такая, что она и все меньшие положительные степени двойки допустимы в качестве модуля типа modular_type_definition.
- Max_Nonbinary_Modulus
- Значение, такое, что оно и все меньшие положительные целые числа допустимы в качестве модуля типа modular_type_definition.
- Max_Base_Digits
- Наибольшее значение, допустимое для запрошенной десятичной точности в floating_point_definition.
- Max_Digits
- Наибольшее значение, допустимое для запрошенной десятичной точности в floating_point_definition, не имеющем real_range_specification. Max_Digits меньше или равно Max_Base_Digits.
- Max_Mantissa
- Наибольшее возможное количество двоичных разрядов в мантиссе машинных чисел пользовательского обычного типа с плавающей точкой. (Мантисса определена в Приложении G.)
- Fine_Delta
- Наименьший допустимый дельта в ordinary_fixed_point_definition, имеющем real_range_specification range -1.0 .. 1.0.
- Tick
- Период в секундах, приближающий интервал реального времени, в течение которого значение Calendar.Clock остается постоянным.
- Storage_Unit
- Количество битов на элемент хранения.
- Word_Size
- Количество битов на слово.
- Memory_Size
- Значение, определяемое реализацией, предназначенное для отражения размера памяти конфигурации в элементах хранения.
Address — определённого, не ограниченного типа. Address представляет машинные адреса, способные адресовать отдельные элементы хранения. Null_Address — это адрес, отличный от адреса любого объекта или программной единицы.
См. 13.5.3 для объяснения Bit_Order и Default_Bit_Order.
Разрешения реализации
Реализация может добавить дополнительные объявления, определённые реализацией, в пакет System и его дочерние пакеты. Однако обычно лучше, если реализация предоставляет дополнительную функциональность через дочерние пакеты System.
Рекомендации для реализации
Address должен быть типом private.
ПРИМЕЧАНИЯ
14 Существуют также некоторые пакеты, определённые языком, являющиеся дочерними пакетами System.