13.7. СИСТЕМНЫЙ ПАКЕТ

Для каждой реализации имеется предопределенный библиотечный пакет SYSTEM, который включает определения некоторых характеристик, зависящих от конфигурации. Спецификация пакета зависит от реализации и должна быть приведена в приложении F. Видимый раздел этого пакета должен содержать по крайней мере следующие описания:

package SYSTEM is   type ADDRESS is определен-реализацией;   type NAME is определенный-реализацией-перечислимого-типа;   SYSTEM-NAME  : constant NAME := определен - реализацией;   STORAGE-UNIT : constant      := определен-реализацией;   MEMORY-SIZE  : constant      := определен-реализацией;   -- зависящие от системы именованные числа:   MIN-INT      : constant      := определен-реализацией;   МАХ-INT      : constant      := определен-реализацией;   MAX-DIGITS   : constant      := определен-реализацией;   MAX-MANTISSA : constant      := определен-реализацией;   FINE-DELTA   : constant      := определен-реализацией;   TICK         : constant      := определен-реализацией;   -- другие зависящие от системы описания:   subtype PRIORITY is INTEGER range определен-реализацией;end SYSTEM;

Тип ADDRESS — это тип адресов, задаваемых спецификаторами адреса; к этому же типу принадлежат значения, вырабатываемые атрибутом ADDRESS. Значения перечислимого типа NAME — это имена альтернативных машинных конфигураций, обрабатываемых реализацией;

одно из них — константа SYSTEM-NAME. Именованное число STORAGE-UNIT равно числу разрядов в кванте памяти, а именованное число MEMORY-SIZE — числу квантов памяти, доступных в конфигурации; эти именованные числа имеют универсальный-целый тип.

Альтернативная форма пакета SYSTEM с другими значениями SYSTEM-NAME, STORAGE-UNIT и MEMORY-SIZE может быть получена использованием соответствующих прагм. Эти прагмы допустимы только в начале компиляции до первого компилируемого модуля (если он есть) компиляции.

pragma SYSTEM-NAME (литерал-перечисления);

В результате выполнения этой прагмы заданный идентификатором литерал перечисления будет использован для определения константы SYSTEM-NAME. Эта прагма допустима, только если этот идентификатор соответствует одному из литералов типа NAME.

pragma STORAGE-UNIT (числовой-литерал);

В результате выполнения этой прагмы заданное числовым литералом значение будет использовано для определения именованного числа STORAGE-UNIT.

pragma MEMORY-SIZE (числовой-литерал);

В результате выполнения этой прагмы заданное числовым литералом значение будет использовано для определения именованного числа MEMORY-SIZE.

Компиляция любой из этих прагм вызовет неявную перекомпиляцию пакета SYSTEM. Следовательно, любой компилируемый модуль, в спецификаторе контекста которого упоминается пакет SYSTEM, становится устаревшим. Реализация может ввести дополнительные ограничения на использование этих прагм. Например, реализация может допустить их только в начале первой компиляции, когда создается новая программная библиотека.

Примечание. Согласно правилам видимости, описание из пакета SYSTEM видимо в компилируемом модуле только в том случае, если этот пакет упомянут в спецификаторе совместности, примененном (непосредственно или косвенно) к данному компилируемому модулю.

Ссылки: атрибут 4.1.4, библиотечный модуль 10.1, видимость 8.3, видимый раздел 7.2, должен 1.6, идентификатор 2.3, именованное число 3.2, компилируемый модуль 10.1, литерал перечисления 3.5.1, описание 3.1, описание числа 3.2.2, пакет 7, перечислимый тип 3.5.1, прагма 2.8, применим 10.1.1, программная библиотека 10.1, спецификатор адреса 13.5, спецификатор совместности 10.1.1, спецификация пакета 7.1, тип 3.3, числовой литерал 2.4.

13.7.1. ЗАВИСЯЩИЕ ОТ СИСТЕМЫ ИМЕНОВАННЫЕ ЧИСЛА

Перечисленные ниже именованные числа описаны в пакете SYSTEM. Числа FINE-DELTA и TICK принадлежат универсальному-вещественному типу, остальные — универсальному-целому типу.

MIN-INT

Наименьшее (наибольшее по модулю отрицательное) значение из всех определенных целых типов.

МАХ-I NT

Наибольшее (положительное) значение из всех предопределенных целых типов.

MAX-DIGITS

Наибольшее допустимое значение числа значащих десятичных цифр в ограничении для плавающего типа.

MAX-MANTISSA

Наибольшее возможное число двоичных цифр в мантиссе модельных чисел фиксированного подтипа.

FINE-DELTA

Наименьшая дельта, допустимая в ограничении для фиксированного типа, которое имеет ограничение диапазона -1.0..1.0.

TICK

Базовый период времени, выраженный в секундах.

Ссылки: дельта из ограничения фиксированного типа 3.5.9, допустим 1.6, именованное число 3.2, модельное число 3.5.6, ограничение диапазона 3.5, ограничение для плавающего типа 3.5.7, ограничение для фиксированного типа 3.5.9, пакет 7, пакет SYSTEM 13.7, тип 3.3, универсальный-вещественный тип 3.5.6, универсальный-целый тип 3.5.4, целый тип 3.5.4.

13.7.2. АТРИБУТЫ ПРЕДСТАВЛЕНИЯ

Значения некоторых зависящих от реализации характеристик могут быть определены с помощью соответствующих атрибутов представления. Эти атрибуты описаны ниже.

Для любого объекта, программного модуля, метки или входа X:

X'ADDRESS

Вырабатывает адрес первого кванта памяти, отведенной под X. Для подпрограммы, пакета, задачного модуля или метки это значение ссылается на машинный код, связанный с соответствующим телом или оператором. Для входа, для которого задан спецификатор адреса, это значение ссылается на соответствующее аппаратное прерывание. Значение этого атрибута принадлежит типу ADDRESS, определенному в пакете SYSTEM.

Для любого типа или подтипа Х или для любого объекта X:

X'SIZE

Примененный к объекту вырабатывает число битов, отводимых в памяти для размещения объекта. Примененный к типу или подтипу вырабатывает минимальное число битов, необходимое реализации для размещения любого возможного объекта этого типа или подтипа. Значение этого атрибута имеет тип универсальный-целый.

Если префиксом атрибута является функция, то атрибут понимается как атрибут функции (а не как результат вызова функции). Если тип префикса — ссылочный тип, то атрибут понимается как атрибут префикса (а не указанного объекта: атрибуты этого объекта могут быть записаны с префиксом, оканчивающимся зарезервированным словом all).

Для любого компонента С записи R:

R.C'POSITION

Вырабатывает величину смещения первого кванта памяти, занятого полем С, относительно первого кванта памяти, занятого записью R. Величина смещения измеряется числом квантов. Значение этого атрибута принадлежит универсальному-целому типу.

R.C'FIRST_BIT

Вырабатывает величину смещения первого бита, занятого полем С, относительно первого кванта памяти. Величина смещения измеряется числом битов. Значение этого атрибута имеет универсальный-целый тип.

R.C'LAST_BIT

Вырабатывает величину смещения последнего бита, занятого полем С, относительно первого кванта памяти, занятого С. Величина смещения измеряется числом битов. Значение этого атрибута имеет универсальный-целый тип.

Для любого ссылочного типа или подтипа Т:

Т'STORAGE_SIZE

Вырабатывает общее число квантов памяти, выделенных для набора, связанного с базовым типом Т. Значение атрибута имеет универсальный-целый тип.

Для любого задачного типа или объекта задачного типа Т:

Т'STORAGE_SIZE

Вырабатывает число квантов памяти, выделенных для каждой активизации задачи типа Т или активизации объекта Т задачного типа. Значение этого атрибута имеет универсальный-целый тип.

Примечание. Для объекта Х задачного типа атрибут X'SIZE вырабатывает число разрядов, используемых для размещения объекта X; атрибут X'STORAGE_SIZE вырабатывает число квантов памяти, выделенных для активизации задачи, указанной X. Для формального параметра Х в случае передачи параметра копированием Х'ADDRESS вырабатывает адрес локальной копии; в случае передачи параметра ссылкой Х'ADDRESS вырабатывает адрес фактического параметра.

Ссылки: активизация 9.3, атрибут 4.1.4, базовый тип 3.3, вход 9.5, задача 9, задачный модуль 9, задачный объект 9.2, задачный тип 9.2, квант памяти 13.7, компонента 3.3, метка 5.1, набор 3.8, объект 3.2, объект именуемого типа 3.7, оператор 5, пакет 7, передача параметров 6.2, подпрограмма 6, подтип 3.3, предопределенный пакет SYSTEM 13.7, предопределенный тип ADDRESS 13.7, программный модуль 6, спецификатор адреса 13.5, ссылочный подтип 3.8, ссылочный тип 3.8, тело задачи 9.1, тело пакета 7.1, тело подпрограммы 6.3, тип 3.3, универсальный-целый тип 3.5.4, фактический параметр 6.2, формальный параметр 6.1, 6.2.

13.7.3. АТРИБУТЫ ПРЕДСТАВЛЕНИЯ ВЕЩЕСТВЕННЫХ ТИПОВ

Для каждого вещественного типа или подтипа Т определены нижеследующие машинно-зависимые атрибуты, не связанные с модельными числами. Использующие эти атрибуты программы могут получить некоторую дополнительную информацию о характеристиках числового типа (см. разд. 4.5.7 о правилах определения точности операций с вещественными операндами). Для обеспечения переносимости программ должна быть обеспечена известная осторожность в использовании таких машинно-зависимых атрибутов.

Атрибуты, применимые к плавающим и фиксированным типам:

T'MACHINE_ROUNDS

Вырабатывает значение TRUE, если каждая предопределенная арифметическая операция над значениями базового типа Т либо возвращает точный результат, либо осуществляет округление. В противном случае вырабатывает значение FALSE. Значение этого атрибута имеет предопределенный тип BOOLEAN.

T'MACHINE_OVERFLOWS

Вырабатывает значение TRUE, если каждая предопределенная операция над значениями базового типа Т либо возвращает точный результат, либо возбуждает исключение NUMERIC_ERROR при перевыполнении (см. 4.5.7); в противном случае вырабатывает значение FALSE. Значение этого атрибута имеет предопределенный тип BOOLEAN.

Следующие атрибуты дают характеристики машинного представления значений плавающего типа в терминах канонической формы, определенной в разд. 3.5.7:

T'MACHINE_RADIX

Вырабатывает значение основания системы счисления, используемого в машинном представлении базового типа Т. Значение этого атрибута имеет универсальный-целый тип.

T'MACHINE_MANTISSA

Вырабатывает число цифр в мантиссе машинного представления базового типа Т. (Цифра — это расширенная цифра из диапазона 0 .. Т'MACHINE_RADIX - 1.) Значение этого атрибута имеет универсальный-целый тип.

T'MACHINE_EMAX

Вырабатывает наибольшее значение порядка в машинном представлении базового типа Т. Значение этого атрибута имеет универсальный-целый тип.

T'MACHINE_EMIN

Вырабатывает наименьшее (наибольшее по модулю отрицательное) значение порядка в машинном представлении базового типа Т. Значение этого атрибута имеет универсальный-целый тип.

Примечание. В большинстве машин наибольшее представимое в машине число типа Т равно

F'MACHINE_RADIX..(F'MACHINE_EMIN - 1)

а наименьшее положительное представимое число в машине равно

F'MACHINE_RADIX ** (F'MACHINE_EMIN - 1)

Ссылки: арифметическая операция 4.5, атрибут 4.1.4, базовый тип 3.3, вещественный тип 3.5.6, исключение NUMERIC_ERROR 11.1, логическое значение TRUE 3.5.3, логическое значение FALSE 3.5.3, модельное число 3.5.6, основание системы счисления 3.5.7, плавающий тип 3.5.7, подтип 3.3, предопределенный логический тип 3.5.3, предопределенная операция 3.3.3, тип 3.3, универсальный-целый тип 3.5.4, фиксированный тип 3.5.9, числовой тип 3.5.