Справочник Ada 2005
13.7 Пакет System
В каждой реализации есть библиотечный пакет System, который включает определения некоторых зависимых от конфигурации характеристик.
Статическая семантика
Существует следующий определённый языком библиотечный пакет:
package System is
pragma Pure(System);
pragma Pure(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 := implementation-defined;
type Bit_Order is (High_Order_First, Low_Order_First);
Default_Bit_Order : constant Bit_Order := implementation-defined;
-- Декларации, связанные с приоритетом (см. 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 — определённый, не ограниченный тип с предварительной инициализацией (см. 10.2.1). Address представляет машинные адреса, способные адресовать отдельные элементы хранения. Null_Address — адрес, отличный от адреса любого объекта или программной единицы.
Default_Bit_Order должен быть статической константой. См. 13.5.3 для объяснения Bit_Order и Default_Bit_Order.
Разрешения реализации
Реализация может добавить дополнительные декларации, определённые реализацией, в пакет System и его подпакеты. Однако обычно лучше для реализации предоставить дополнительную функциональность через подпакеты System, определённые реализацией.
Рекомендации по реализации
Address должен быть типом private.
ПРИМЕЧАНИЯ
14 Есть также некоторые подпакеты System, определённые языком в другом месте.