a. Атрибуты, предопределенные в языке
P'ADDRESS | Префикс Р обозначает объект, программный модуль, метку или вход. Вырабатывает адрес первого кванта памяти, отведенной под Р. Для подпрограммы, пакета, задачи или метки это значение ссылается на машинный код, связанный с соответствующим телом или оператором. Для входа, для которого задан спецификатор адреса, это значение ссылается на соответствующее аппаратное прерывание. Значение этого атрибута имеет предопределенный в пакете SYSTEM тип ADDRESS (см. 2). |
P'AFT | Префикс Р обозначает фиксированный подтип. Вырабатывает число десятичных цифр после точки, необходимых для обеспечения точности подтипа Р, если только атрибут DELTA подтипа Р не превышает 0.1, в этом случае атрибут вырабатывает значение единицы. (P'AFT — это наименьшее положительное число N, для которого (10 ** N)*P' DELTA больше или равно 1.) Значение этого атрибута имеет универсальный-целый тип (см. 10). |
P'BASE | Префикс Р обозначает тип или подтип. Этот атрибут обозначает базовый тип Р и может быть только префиксом имени другого атрибута, например P'BASE'FIRST (см. 3). |
P'CALLABLE | Префикс Р — это объект задачного типа. Вырабатывает значение FALSE, когда выполнение задачи Р либо закончено, либо завершено, либо задача находится в аварийном состоянии. В остальных случаях вырабатывает значение TRUE. Значение этого атрибута имеет предопределенный тип BOOLEAN (см. 9.9). |
P'CONSTRAINED | Префикс Р обозначает объект некоторого типа с дискриминантами. Вырабатывает значение TRUE, если ограничение дискриминантов наложено на объект Р или если объект — константа (включая формальный параметр или формальный параметр настройки вида in). В остальных случаях вырабатывает значение FALSE. Если Р — формальный параметр настройки вида in out или если Р — формальный параметр вида in out или out, а обозначение типа, заданное в соответствующей спецификации параметра, обозначает неограниченный тип с дискриминантами, то значение этого атрибута получается из значения атрибута соответствующего фактического параметра. Значение атрибута имеет предопределенный тип BOOLEAN (см. 4). |
P'CONSTRAINED | Префикс Р обозначает личный тип или подтип. Вырабатывает значение FALSE, если Р обозначает неограниченный неформальный личный тип с дискриминантами; вырабатывает это же значение, если Р обозначает настраиваемый формальный личный тип, а соответствующий фактический подтип — это либо неограниченный тип с дискриминантами, либо неограниченный индексируемый тип. В остальных случаях вырабатывается значение TRUE. Значение этого атрибута имеет предопределенный тип BOOLEAN (см. 2). |
P'COUNT | Префикс Р обозначает вход задачи. Вырабатывает число вызовов входа, присутствующих в очереди этого входа, (если атрибут вычисляется внутри оператора принятия входа Р, то в это число не входит вызывающая задача). Значение этого атрибута имеет универсальный-целый тип (см. 9.9). |
Р'DELTA | Префикс Р обозначает фиксированный подтип. Вырабатывает значение дельты, заданной в определении точности фиксированного типа для подтипа Р. Значение этого атрибута имеет универсальный-вещественный тип (см. 10) |
P'DIGITS | Префикс Р обозначает плавающий подтип. Вырабатывает число десятичных цифр в десятичной мантиссе модельных чисел подтипа Р. (Этот атрибут вырабатывает число D, определенное в разд. 7.) Значение этого атрибута имеет универсальный-целый тип (см. 8). |
P'EMAX | Префикс Р обозначает плавающий подтип. Вырабатывает наибольшее значение порядка двоичной канонической формы модельных чисел подтипа Р. (Этот атрибут вырабатывает произведение 4*В.) Значение этого атрибута имеет универсальный-целый тип (см. 8). |
P'EPSILON | Префикс Р обозначает плавающий подтип. Вырабатывает абсолютное значение разности между модельным числом 1.0 и следующим модельным числом подтипа Р. Значение этого атрибута имеет универсальный-вещественный тип (см. 8). |
P'FIRST | Префикс Р обозначает скалярный тип или подтип скалярного типа. Вырабатывает значение нижней границы Р. Значение этого атрибута имеет тип Р (см. 3.5). |
P'FIRST | Префикс Р соответствует индексируемому типу или обозначает ограниченный индексируемый подтип. Вырабатывает значение нижней границы диапазона первого индекса. Значение этого атрибута имеет тот же тип, что и тип значения нижней границы (см. 2 и 2). |
P'FIRST(N) | Префикс Р соответствует индексируемому типу или обозначает ограниченный индексируемый подтип. Вырабатывает значение нижней границы диапазона N-го индекса. Значение этого атрибута имеет тот же тип, что и указанная нижняя граница. Аргумент N должен быть статическим выражением типа универсальный-целый. Значение N должно быть положительным (ненулевым) и не превосходить размерности массива (см. 2 и 2). |
P'FIRST_BIT | Префикс Р обозначает компоненту записи. Вырабатывает величину смещения первого бита относительно начала первого кванта памяти, занимаемой этой компонентой. Величина смещения измеряется числом битов. Значение этого атрибута имеет тип универсальный-целый (см. 2). |
P'FORE | Префикс Р обозначает фиксированный подтип. Вырабатывает минимальное число символов, необходимых для десятичного представления целой части любого значения подтипа Р в предположении, что это представление не включает порядок, но включает односимвольный префикс, который является либо знаком минус, либо пробелом. (Это минимальное число не учитывает предшествующие нули и символы подчеркивания и по меньшей мере равно двум.) Значение этого атрибута имеет универсальный-целый тип (см. 10). |
P'IMAGE(X) | Префикс Р обозначает дискретный тип или подтип. Этот атрибут представляет собой функцию с одним параметром. Фактический параметр Х должен быть значением базового типа Р. Тип результата — предопределенный тип STRING. Результат представляет собой образ значения X, т. е. последовательность символов, представляющих изображение значения. Образу целого значения соответствуют десятичный литерал без символов подчеркивания, предшествующих нулей, порядка и последующих пробелов, но с одним символом слева, который представляет собой либо минус, либо пробел. Образом литерала перечисления является либо соответствующий идентификатор из прописных букв, либо соответствующий символьный литерал (включая два апострофа) без предшествующих и последующих пробелов. Образ символа, отличного от графического, определяется реализацией (см. 5). |
P'LARGE | Префикс Р обозначает вещественный подтип. Вырабатывает наибольшее положительное модельное число подтипа Р. Значение этого атрибута имеет универсальный-вещественный тип (см. 8 и 10). |
P'LAST | Префикс Р обозначает скалярный тип или подтип скалярного типа. Вырабатывает значение верхней границы Р. Значение этого атрибута имеет тип Р (см. 3.5). |
P'LAST | Префикс Р соответствует индексируемому типу или обозначает ограниченный индексируемый подтип. Вырабатывает значение верхней границы диапазона первого индекса. Значение атрибута имеет тип верхней границы (см. 2 и 2). |
P'LAST(N) | Префикс Р соответствует индексируемому типу или обозначает ограниченный индексируемый подтип. Вырабатывает значение верхней границы диапазона N-го индекса. Значение этого атрибута имеет тот же тип, что и верхняя граница. Аргумент N должен быть статическим выражением типа универсальный-целый. Значение N должно быть положительным (ненулевым) и не превышать размерности массива (см. 2 и 2). |
P'LAST_BIT | Префикс Р обозначает компоненту записи. Вырабатывает величину смещения последнего бита относительно первого кванта памяти, занимаемой этой компонентой. Величина смещения измеряется числом битов. Значение атрибута имеет тип универсальный-целый (см. 2). |
P'LENGTH | Префикс Р соответствует индексируемому типу или обозначает ограниченный индексируемый подтип. Вырабатывает число значений диапазона первого индекса (нуль для пустого диапазона). Значение этого атрибута имеет универсальный-целый тип (см. 2). |
P'LENGTH(N) | Префикс Р соответствует индексируемому типу или обозначает ограниченный индексируемый подтип. Вырабатывает число значений в диапазоне N-го индекса (нуль для пустого диапазона). Значение этого атрибута имеет универсальный-целый тип. Аргумент N должен быть статическим выражением типа универсальный-целый. Значение N должно быть положительным (ненулевым) и не должно превышать размерности массива (см. 2 и 2). |
P'MACHINE_EMAX | Префикс Р обозначает плавающий тип или подтип. Вырабатывает наибольшее значение порядка машинного представления базового типа Р. Значение этого атрибута имеет универсальный-целый тип (см. 3). |
P'MACHINE_EMIN | Префикс Р обозначает плавающий тип или подтип. Вырабатывает наименьшее (наибольшее по модулю отрицательное) значение порядка машинного представления базового типа Р. Значение этого атрибута имеет универсальный-целый тип (см. 3). |
P'MACHINE_MANTISSA | Префикс Р обозначает плавающий тип или подтип. Вырабатывает число цифр в мантиссе машинного представления базового типа Р (цифры являются расширенными цифрами из диапазона 0 . . P'MACHINE_RADIX - 1). Значение этого атрибута имеет универсальный-целый тип (см. 3). |
P'MACHINE_OVERFLOWS | Префикс Р обозначает вещественный тип или подтип. Вырабатывает значение TRUE, если каждая предопределенная операция над значениями базового типа Р либо возвращает точный результат, либо возбуждение исключения NUMERIC_ERROR при переполнении. В противном случае вырабатывает значение FALSE. Значение этого атрибута имеет предопределенный тип BOOLEAN (см. 3). |
P'MACHINE_RADIX | Префикс Р обозначает плавающий тип или подтип. Вырабатывает значение основания, используемое в машинном представлении базового типа Р. Значение этого атрибута имеет тип универсальный-целый (см. 3). |
P'MACHINE_ROUNDS | Префикс Р обозначает вещественный тип или подтип. Вырабатывает значение TRUE, если каждая предопределенная арифметическая операция над значениями базового типа Р либо возвращает точный результат, либо осуществляет округление. В противном случае вырабатывает значение FALSE. Значение этого атрибута имеет предопределенный тип BOOLEAN (см. 3). |
P'MANTISSA | Префикс Р обозначает вещественный подтип. Вырабатывает число двоичных цифр мантиссы модельных чисел подтипа Р. (Этот атрибут вырабатывает число В, введенное в разд. 7 для плавающего типа и в разд. 9 для фиксированного типа.) Значение этого атрибута имеет универсальный-целый тип (см. 8 и 10). |
P'POS(X) | Префикс Р обозначает дискретный тип или подтип. Этот атрибут является функцией с одним параметром. Фактический параметр Х должен быть значением базового типа Р. Тип результата — универсальный-целый. Результатом является порядковый номер позиции для значения фактического параметра (см. 5), |
P'POSITION | Префикс Р обозначает компоненту записи. Вырабатывает величину смещения первого кванта памяти, занятого этой компонентой, относительно первого кванта памяти, занимаемого записью. Величина смещения измеряется числом квантов. Значение этого атрибута имеет универсальный-целый тип (см. 2). |
P'PRED(X) | Префикс Р обозначает дискретный тип или подтип. Этот атрибут является функцией с одним параметром. Фактический параметр Х должен быть значением базового типа Р. Тип результата — базовый тип Р. Результатом является значение с номером позиции, на единицу меньшим номера позиции для значения X. Если Х равен P'BASE'FIRST, то возбуждается исключение CONSTRAINT_ERROR (см. 5). |
P'RANGE | Префикс Р соответствует индексируемому типу или обозначает ограниченный индексируемый подтип. Вырабатывает диапазон первого индекса Р, т. е. диапазон Р'FIRST . . P'LAST. (см.2). |
P'RANGE(N) | Префикс Р соответствует индексируемому типу или обозначает ограниченный индексируемый подтип. Вырабатывает диапазон N-го индекса Р, т. е. диапазон P'FIRST (N) . . P'LAST (N) (см. 2). |
P'SAFE_EMAX | Префикс Р обозначает плавающий тип или подтип. Вырабатывает наибольшее значение порядка двоичной канонической формы хранимых чисел базового типа Р. (Этот атрибут вырабатывает число Е, определенное в разд. 7.) Значение этого атрибута имеет универсальный-целый тип (см. 8). |
P'SAFE_LARGE | Префикс Р обозначает вещественный тип или подтип. Вырабатывает наибольшее положительное хранимое число базового типа Р. Значение этого атрибута имеет универсальный-вещественный тип (см. 8 и 10). |
P'SAFE_SMALL | Префикс Р обозначает вещественный тип или подтип. Вырабатывает наименьшее положительное (ненулевое) хранимое число базового типа Р. Значение этого атрибута имеет универсальный-вещественный тип (см. 8 и 10). |
P'SIZE | Префикс Р обозначает тип или подтип. Вырабатывает минимальное число битов, необходимое реализации для представления любого возможного значения объекта типа или подтипа Р. Значение этого атрибута имеет универсальный-целый тип (см. 2). |
P'SIZE | Префикс Р обозначает объект. Вырабатывает число битов, отведенных для размещения объекта. Значение этого атрибута имеет универсальный-целый тип (см.2). |
P'SMALL | Префикс Р обозначает вещественный подтип. Вырабатывает наименьшее положительное (ненулевое) число подтипа Р. Значение этого атрибута имеет универсальный-вещественный тип (см. 8 и 10). |
P'STORAGE_SIZE | Префикс Р обозначает ссылочный тип или подтип. Вырабатывает общее число квантов памяти, резервируемых для соответствующего базовому типу Р набора. Значение этого атрибута имеет универсальный-целый тип (см.2). |
P'STORAGE_SIZE | Префикс обозначает задачный тип или задачу. Вырабатывает общее число квантов памяти, резервируемых для каждой активизации задачи типа Р или объекта Р задачного типа. Значение этого атрибута имеет универсальный-целый тип (см. 2). |
P'SUCC(X) | Префикс Р обозначает дискретный тип или подтип. Этот атрибут является функцией с одним параметром. Фактический параметр Х должен быть значением базового типа Р. Тип результата является базовым типом Р. Результат представляет собой значение с номером позиции, на единицу большим номера позиции для значения X. Если Х равен P'BASE'LAST, то возбуждается исключение CONSTRAINT_ERROR (см. 5). |
P'TERMINATED | Префикс Р соответствует задачному типу [] . Вырабатывает значение TRUE, если задача Р завершена, иначе вырабатывает значение FALSE. Значение этого атрибута имеет предопределенный тип BOOLEAN (см. 9.9). |
P'VAL(X) | Префикс Р обозначает дискретный тип или подтип. Этот атрибут является специальной функцией с одним параметром X, который может быть любого целого типа. Тип результата является базовым типом Р. Результат представляет собой значение, чьим номером позиции является значение типа универсальный-целый, и это значение соответствует X. Если соответствующее Х универсальное-целое значение не принадлежит диапазону P'POS (P'BASE'FIRST). .P'POS (P'BASE'LAST), то возбуждается исключение CONSTRAINT_ERROR (см. 5). |
P'VALUE(X) | Префикс Р обозначает дискретный тип или подтип. Этот атрибут является функцией с одним параметром. Фактический параметр Х должен быть значением предопределенного типа STRING. Тип результата — базовый тип Р. Любые предшествующие и последующие пробелы последовательности символов, соответствующей X, игнорируются. Если для перечислимого типа последовательность символов имеет синтаксис литерала перечисления и если этот литерал существует для базового типа Р, то результатом является соответствующее значение перечислимого типа. Если для целого типа последовательность символов имеет синтаксис целого литерала, возможно с дополнительным символом плюс или минус, и если соответствующее значение принадлежит базовому типу Р, то результатом является именно это значение. Во всех остальных случаях возбуждается исключение CONSTRAINT_ERROR (CM. 5). |
Р'WIDTH | Префикс Р обозначает дискретный подтип. Вырабатывает максимальную длину образа по всем значениям подтипа Р. (Образ — это последовательность символов, вырабатываемых атрибутом IMAGE.) Значение этого атрибута имеет универсальный-целый тип (см. 5). |
[] Или задаче. - Прим. ред. |
b. Прагмы, предопределенные в языке
Ниже определяются прагмы LIST, PAGE и OPTIMIZE и остальные предопределенные прагмы, которые рассматривались в описании языка.
Прагма | Смысл |
CONTROLLED | Единственным аргументом является простое имя ссылочного типа. Эта прагма допустима только непосредственно в разделе описаний или в спецификации пакета, содержащих описание этого ссылочного типа, причем описание должно помещаться перед прагмой. Не допускается использование этой прагмы для производного типа. Прагма указывает, что для объектов, указанных значениями соответствующего ссылочного типа, не должно выполняться автоматическое освобождение памяти, исключая выход из самого вложенного оператора блока, тела подпрограммы или тела задачи, охватывающих описание ссылочного типа либо выход из главной программы (см. 4.8) |
ELABORATE | В качестве аргументов используются одно или несколько простых имен, обозначающих библиотечные модули. Эта прагма допустима только непосредственно после спецификатора контекста компилируемого модуля (перед библиотечным или вторичным модулем). Каждый агрумент прагмы должен быть простым именем библиотечного модуля, упомянутого в спецификаторе контекста. Эта прагма указывает, что тело соответствующего библиотечного модуля должно быть предвыполнено до предвыполнения данного компилируемого модуля. Если данный компилируемый модуль является субмодулем, то тело библиотечного модуля должно быть предвыполнено до предвыполнения тела родительского (по отношению к этому субмодулю) библиотечного модуля (см. 10.5). |
INLINE | В качестве аргументов используется одно или несколько имен; каждое имя является либо именем подпрограммы, либо именем настраиваемой подпрограммы. Эта прагма допустима только на месте элемента описания в разделе описаний или в спецификации пакета либо же после библиотечного модуля в компиляции, но до любого следующего компилируемого модуля. Прагма указывает на возможную подстановку тела подпрограммы вместо каждого их вызова; в случае настраиваемой подпрограммы эта прагма относится к вызовам ее конкретизации (см. 2). |
INTERFACE | В качестве аргументов используются имя языка и имя подпрограммы. Эта прагма допустима на месте элемента описания и должна применяться к подпрограмме, описанной ранее в виде элемента описания того же самого раздела описаний или спецификации пакета. Эта прагма допустима также для библиотечного модуля; в этом случае прагма должна помещаться после описания подпрограммы и перед любым следующим компилируемым модулем. Эта прагма указывает другой язык (и тем самым соглашения по вызову) и информирует компилятор о том, что для соответствующей подпрограммы будет представлен объектный модуль (см. 13.9). |
LIST | В качестве единственного аргумента используется один из идентификаторов ON или OFF. Эта прагма допустима в любом месте, где допустимы прагмы. Прагма указывает, что необходимо продолжить или прекратить вывод листинга компиляции до тех пор, пока в той же компиляции не встретится прагма LIST с другим аргументом. Текст самой прагмы печатается всегда, если компилятор выводит листинг. |
MEMORY_SIZE | В качестве единственного аргумента используется числовой литерал. Эта прагма допустима только в начале компиляции, до ее первого компилируемого модуля (если он есть). Применение этой прагмы приводит к использованию указанного числового литерала для определения именованного числа MEMORY_SIZE (см. 13.7). |
OPTIMIZE | В качестве единственного аргумента используется один из идентификаторов TIME или SPACE. Эта прагма допустима только внутри раздела описаний и относится к блоку или телу, охватывающему этот раздел описаний. Она указывает главный критерий оптимизации — время выполнения или занимаемую память. |
PACK | В качестве единственного аргумента используется простое имя именуемого или индексируемого типа. Допустимое положение этой прагмы в программе и ограничения, относящиеся к именуемому типу, определяются теми же правилами, что и для спецификатора представления. Прагма указывает, что при выборе представления значений данного типа главным критерием оптимизации обязан быть минимум занимаемой памяти (см. 13.1). |
PAGE | Эта прагма не имеет аргументов и допустима везде, где допустимы прагмы. Она указывает, что текст программы, следующий за прагмой, должен начинаться с новой страницы (если компилятор параллельно выводит листинг). |
PRIORITY | Единственным аргументом этой прагмы является статическое выражение предопределенного целого подтипа PRIORITY. Эта прагма допустима только в спецификации задачи или непосредственно внутри самого внешнего раздела описаний главной программы. Она указывает приоритет этой задачи (или задач этого задачного типа) или приоритет главной программы (см. 9.8). |
SHARED | В качестве единственного аргумента этой прагмы используется простое имя переменной. Эта прагма допустима только для переменной, описанной посредством описания объекта скалярного или ссылочного типа. И описание переменной, и прагма должны находиться (в указанном порядке) в одном и том же разделе описаний или в спецификации пакета. Эта прагма указывает, что каждое чтение или изменение значения этой переменной является ее точкой синхронизации. Реализация должна ограничивать круг объектов, для которых допустимо использование этой прагмы, теми объектами, прямое чтение или прямое изменение значения которых реализуются как неделимые операции (см. 9.11). |
STORAGE_UNIT | В качестве единственного аргумента используется числовой литерал. Эта прагма допустима только в начале компиляции, до первого ее компилируемого модуля (если он есть). Применение этой прагмы приводит к использованию для определения именованного числа STORAGE_UNIT значения заданного числового литерала (см. 13.7). |
SUPPRESS | В качестве аргументов используются идентификатор проверки, а также имя объекта, типа или подтипа, подпрограммы, задачного модуля или настраиваемого модуля. Эта прагма допустима только непосредственно либо в разделе описаний, либо в спецификации пакета. В последнем случае единственным допустимым вариантом является использование имени, обозначающего понятие (или несколько совмещенных подпрограмм), описанное непосредственно внутри этой спецификации. Разрешение подавить указанную проверку действует от прагмы до конца области действия описаний, соответствующей самому вложенному оператору блока или программному модулю. Для |
прагмы, используемой в спецификации пакета, это разрешение действительно до конца области действия описания, заданного своим именем понятия. Если в качестве аргумента прагмы используется имя, то разрешение на подавление указанной проверки ограничивается следующими правилами: это разрешение распространяется только на операции над указанными объектами базового типа указанного типа или подтипа, на вызовы указанной подпрограммы, на активизацию задач указанного задачного типа, на конкретизацию указанного настраиваемого модуля (см. 11.7). | |
SYSTEM_NAME | Единственным аргументом прагмы является литерал перечисления. Эта прагма допустима только в начале компиляции, до первого ее компилируемого модуля (если он есть). Применение прагмы приводит к использованию литерала перечисления, заданного идентификатором, для определения константы SYSTEM_NAME. Прагма допустима только в том случае, если указанный в ней идентификатор соответствует одному из литералов перечисления типа NAME, описанного в пакете SYSTEM (см. 13.7). |
c. Предопределенное окружение языка
Ниже дана спецификация пакета STANDARD, содержащая все предопределенные в языке идентификаторы. Соответствующее тело пакета определено реализацией и не показано.
Предопределенные для описанных в пакете STANDARD типов операции даны в виде комментариев, так как они описаны неявно. Для псевдоимен анонимных типов (универсальный-вещественный, например), а также для неопределенной информации (например, определен-реализацией и любой-фиксированный-тип) используется курсив.
package STANDARD is type BOOLEAN is (FALSE, TRUE); -- Предопределенными операциями отношения -- для этого типа являются следующие: -- function "=" (LEFT, RIGHT : BOOLEAN) return BOOLEAN; -- function "/=" (LEFT, RIGHT : BOOLEAN) return BOOLEAN; -- function "<" (LEFT, RIGHT : BOOLEAN) return BOOLEAN; -- function "<=" (LEFT, RIGHT : BOOLEAN) return BOOLEAN; -- function ">" (LEFT, RIGHT : BOOLEAN) return BOOLEAN; -- function ">=" (LEFT, RIGHT : BOOLEAN) return BOOLEAN; -- Предопределенными логическими операциями -- для этого типа являются следующие: -- function "and" (LEFT, RIGHT : BOOLEAN) return BOOLEAN; -- function "or" (LEFT, RIGHT : BOOLEAN) return BOOLEAN; -- function "xor" (LEFT, RIGHT : BOOLEAN) return BOOLEAN; -- function "not" (RIGHT : BOOLEAN) return BOOLEAN; -- Предопределен универсальный тип универсальный, целый. type INTEGER is определен-реализацией; -- Для этого типа предопределены следующие операции: -- function "=" (LEFT, RIGHT : INTEGER) return BOOLEAN; -- function "/=" (LEFT, RIGHT : INTEGER) return BOOLEAN; -- function "<" (LEFT, RIGHT : INTEGER) return BOOLEAN; -- function "<=" (LEFT, RIGHT : INTEGER) return BOOLEAN; -- function ">" (LEFT, RIGHT : INTEGER) return BOOLEAN; -- function ">=" (LEFT, RIGHT : INTEGER) return BOOLEAN; -- function "+" (RIGHT : INTEGER) return INTEGER; -- function "-" (RIGHT : INTEGER) return INTEGER; -- function "abs" (RIGHT : INTEGER) return INTEGER; -- function "+" (LEFT, RIGHT : INTEGER) return INTEGER; -- function "-" (LEFT, RIGHT : INTEGER) return INTEGER; -- function "*" (LEFT, RIGHT : INTEGER) return INTEGER; -- function "/" (LEFT, RIGHT : INTEGER) return INTEGER; -- function "rem" (LEFT, RIGHT : INTEGER) return INTEGER; -- function "mod" (LEFT, RIGHT : INTEGER) return INTEGER; -- function "**" (LEFT : INTEGER; RIGHT : INTEGER) return INTEGER; -- Реализация может обеспечить другие предопределенные целые типы. Рекомендуется, чтобы -- имена этих дополнительных типов оканчивались на INTEGER, например, SHORT_INTEGER или -- LONG_INTEGER. Спецификация каждой операции для типа универсальный-целый или для -- любого дополнительного предопределенного целого типа может быть получена заменой -- идентификатора INTEGER на имя этого типа в спецификации соответствующей операции для -- типа INTEGER исключая правый операнд операции возведения в степень. -- Универсальный тип универсальный-вещественный предопределен. type FLOAT is определен-реализацией; -- Для этого типа предопределены следующие операции: -- function "=" (LEFT, RIGHT : FLOAT) return BOOLEAN; -- function "/=" (LEFT, RIGHT : FLOAT) return BOOLEAN; -- function "<" (LEFT, RIGHT : FLOAT) return BOOLEAN; -- function "<=" (LEFT, RIGHT : FLOAT) return BOOLEAN; -- function ">" (LEFT, RIGHT : FLOAT) return BOOLEAN; -- function ">=" (LEFT, RIGHT : FLOAT) return BOOLEAN; -- function "+" (RIGHT : FLOAT) return FLOAT; -- function "-" (RIGHT : FLOAT) return FLOAT; -- function "abs" (RIGHT : FLOAT) return FLOAT; -- function "+" (LEFT, RIGHT : FLOAT) return FLOAT; -- function "-" (LEFT, RIGHT : FLOAT) return FLOAT; -- function "*" (LEFT, RIGHT : FLOAT) return FLOAT; -- function "/" (LEFT, RIGHT : FLOAT) return FLOAT; -- function "**" (LEFT : FLOAT; RIGHT : INTEGER) return FLOAT; -- Реализация может обеспечить дополнительные предопределенные плавающие типы. -- Рекомендуется, чтобы имена таких дополнительных типов оканчивались на FLOAT, -- например SHORT_FLOAT или LONG_FLOAT. Спецификация каждой операции для -- типа универсальный-вещественный или для любого дополнительного -- предопределенного плавающего типа может быть получена заменой идентификатора FLOAT -- на имя этого типа в спецификации соответствующей операции для типа FLOAT. -- Кроме того, для универсальных типов предопределены следующие операции: -- function "*" (LEFT : универсальный целый;; RIGHT : универсальный-вещественный) return универсальный-вещественный; -- function "*" (LEFT : универсальный-вещественный; RIGHT : универсальный целый;) return универсальный-вещественный; -- function "/" (LEFT : универсальный-вещественный; RIGHT : универсальный целый;) return универсальный-вещественный; -- Тип универсальный-фиксированный предопределен. Единственными операциями, описанными -- для этого типа, являются -- function "*" (LEFT : любой-фиксированный-тип; RIGHT : любой-фиксированный-тип) return universal_fixed; -- function "/" (LEFT : любой-фиксированный-тип; RIGHT : любой-фиксированный-тип) return universal_fixed; -- Следующие символы образуют стандартный набор символов -- ASCII. Символьные литералы, соответствующие управляющим символам, идентификаторами не -- являются. В этом определении они выделены курсивом. type CHARACTER is (nul, soh, stx, etx, eot, enq, ack, bel, bs, ht, lf, vt, ff, cr, so, si, dle, dc1, dc2, dc3, dc4, nak, syn, etb, can, em, sub, esc, fs, gs, rs, us, ' ', '!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '~', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', del); for CHARACTER use -- 128 ASCII character set without holes (0, 1, 2, 3, 4, 5, ..., 125, 126, 127); -- Предопределенные операции для типа CHARACTER те же самые, что и для любого перечислимого типа. package ASCII is -- Управляющие символы: NUL : constant CHARACTER := nul; SOH : constant CHARACTER := soh: STX : constant CHARACTER := stx; ETX : constant CHARACTER := etx; EOT : constant CHARACTER := eot; ENQ : constant CHARACTER := enq: ACK : constant CHARACTER := ack; BEL : constant CHARACTER := bel; BS : constant CHARACTER := bs; HT : constant CHARACTER := ht; LF : constant CHARACTER := lf; VT : constant CHARACTER := vt; FF : constant CHARACTER := ff; CR : constant CHARACTER := cr; SO : constant CHARACTER := so; SI : constant CHARACTER := si; DLE : constant CHARACTER := dle; DC1 : constant CHARACTER := dc1; DC2 : constant CHARACTER := dc2; DC3 : constant CHARACTER := dc3; DC4 : constant CHARACTER := dc4; NAK : constant CHARACTER := nak; SYN : constant CHARACTER := syn; ETB : constant CHARACTER := etb; CAN : constant CHARACTER := can; EM : constant CHARACTER := em: SUB : constant CHARACTER := sub; ESC : constant CHARACTER := esc; FS : constant CHARACTER := fs; GS : constant CHARACTER := gs; RS : constant CHARACTER := rs; US : constant CHARACTER := us; DEL : constant CHARACTER := del; -- Другие символы: EXCLAM : constant CHARACTER := '!'; QUOTATION : constant CHARACTER := '"'; SHARP : constant CHARACTER := '#'; DOLLAR : constant CHARACTER := '$'; PERCENT : constant CHARACTER := '%'; AMPERSAND : constant CHARACTER := '&'; COLON : constant CHARACTER := ':'; SEMICOLON : constant CHARACTER := ';'; QUERY : constant CHARACTER := '?'; AT_SIGN : constant CHARACTER := '@'; L_BRACKET: constant CHARACTER := '['; BACK_SLASH: constant CHARACTER := '\'; R_BRACKET: constant CHARACTER := ']'; CIRCUMFLEX: constant CHARACTER := '~'; UNDERLINE: constant CHARACTER := '_'; GRAVE : constant CHARACTER := '`'; L_BRACE : constant CHARACTER := '{'; BAR : constant CHARACTER := '|'; R_BRACE : constant CHARACTER := '}'; TILDE : constant CHARACTER := '~'; -- Строчные буквы: LC_A : constant CHARACTER := 'a'; ... LC_Z : constant CHARACTER := 'z'; end ASCII; -- Предопределенные подтипы: subtype NATURAL is INTEGER range 0 .. INTEGER'LAST; subtype POSITIVE is INTEGER range 1 .. INTEGER'LAST; -- Предопределенный строковой тип: type STRING is array(POSITIVE range <>) of CHARACTER; pragma PACK(STRING); -- Следующие операции для этого типа предопределены: -- function "=" (LEFT, RIGHT : STRING) return BOOLEAN; -- function "/=" (LEFT, RIGHT : STRING) return BOOLEAN; -- function "<" (LEFT, RIGHT : STRING) return BOOLEAN; -- function "<=" (LEFT, RIGHT : STRING) return BOOLEAN; -- function ">" (LEFT, RIGHT : STRING) return BOOLEAN; -- function ">=" (LEFT, RIGHT : STRING) return BOOLEAN; -- function "&" (LEFT : STRING; RIGHT : STRING) return STRING; -- function "&" (LEFT : CHARACTER; RIGHT : STRING) return STRING; -- function "&" (LEFT : STRING; RIGHT : CHARACTER) return STRING; -- function "&" (LEFT : CHARACTER; RIGHT : CHARACTER) return STRING; type DURATION is delta определен-реализацией range определен-реализацией; -- Для типа DURATION предопределены все те операции, -- что и для любого фиксированного типа -- Предопределены следующие исключения: CONSTRAINT_ERROR : exception; NUMERIC_ERROR : exception; PROGRAM_ERROR : exception; STORAGE_ERROR : exception; TASKING_ERROR : exception; end STANDARD;Некоторые аспекты предопределенных понятий не могут быть выражены в терминах самого языка. Хотя, например, перечислимый тип BOOLEAN может быть записан посредством двух литералов перечисления FALSE и TRUE, формы управления промежуточной проверкой в самом языке выражены быть не могут.
Примечание. Определением языка предопределены следующие библиотечные модули:
пакет CALENDAR
пакет SYSTEM
пакет MACHINE_CODE(ecnu он предусмотрен)
настраиваемая процедура UNCHECKED_DEALLOCATION
настраиваемая функция UNCHECKED_CONVERSION
настраиваемый пакет SEQUENTIAL_IO
настраиваемый пакет DIRECT_IO
пакет TEXT_IO
пакет IO_EXCEPTIONS
пакет LOW_LEVEL_IO
d. Термины и определения
Это приложение носит информационный характер и не является частью определения стандарта языка. Термины, выделенные в тексте курсивом, либо имеют собственную статью, либо описываются в статьях, относящихся к логически связанным с ними понятиям. После термина в скобках приведен соответствующий английский термин.
Агрегат (aggregate) — базовая операция над типом, которая объединяет значения компонент в составное значение индексируемого типа (агрегат массива) или именуемого типа (агрегат записи), являющихся разновидностями составного типа. Компоненты агрегата могут быть позиционными (координатными) и/или именованными (ключевыми).
Атрибут (attribute) — базовая операция над типом, которая вырабатывает предопределенную характеристику поименованного понятия, указанного префиксом; некоторые атрибуты являются функциями, типом или диапазоном.
Вещественный тип (real type) — набор приближенных значений вещественных чисел, заданных с относительной погрешностью (плавающий тип} или абсолютной погрешностью (фиксированный тип). Вещественный тип реализуется хранимыми в памяти вычислительной машины числами и определяется точностью приближения и диапазоном.
Вид (mode), см. параметр.
Видимость (visibility) — доступность характеристик описанного понятия при его применении в данной точке текста программы. Описание понятия, вводящее идентификатор, называется видимым в данной точке текста программы, если это понятие осмысленно при появлении его идентификатора в этой точке программы. Прямая видимость подразумевает одно описание понятия с характеристиками, уникальными в области действия, и некоторое число использовании этого понятия. При именовании описание видимо на месте постфикса в именуемой компоненте или на месте имени в именованном сопоставлении. Иначе, описание видимо непосредственно всякий раз, когда единственный идентификатор имеет этот смысл.
Видимый раздел (visible part), см. пакет.
Возбуждение исключения (raising an exception), см. исключение.
Вход (entry) — именование точки синхронизации задач и передачи данных между ними. Вход используется для осуществления взаимодействия задач. Синтаксически вызов входа похож на вызов подпрограммы; его внутренний механизм определяется одним или несколькими операторами принятия, специфицирующими действия, выполняемые при вызове входа.
Вычисление (evaluation) — процесс получения значения (например, выражения}. Этот процесс происходит во время выполнения программы.
Выражение (expression) — формула, определяющая процесс получения значения.
Генератор (allocator) — базовая операция над типом, создающая объект и вырабатывающая ссылочное значение, которое указывает на этот объект. Созданный объект должен сохраняться до тех пор, пока существует обозначение объекта некоторым именем.
Диапазон (range) — упорядоченный набор последовательных значений скалярного типа. Диапазон задается нижней и верхней границами этого набора значений. Значение из диапазона называется принадлежащим этому диапазону.
Дискретный тип (discrete type) — упорядоченный набор различных значений. Дискретными типами являются перечиспимый и целый типы. Дискретные типы используются для индексирования и управления повторением в операторах цикла, а также в выборах операторов выбора и вариантах записи.
Дискриминант (discriminant) — специальный компонент объекта или значение именуемого типа. Подтипы других компонентов и даже их присутствие или отсутствие могут зависеть от значения дискриминанта.
Задача (task) — программный модуль, функционирующий параллельно с другими частями программы. Задача задается спецификацией задачи, которая задает имя задачи, а также имена и формальные параметры ее входов, и телом задачи, которое определяет ее выполнение. Задачный модуль (модуль-задача) является одним из видов программных модулей. Заданный тип — это тип, который представляет возможность последующего описания любого количества однотипных задач. Говорят, что значение задачного типа указывает задачу.
Именованное сопоставление (named association) — способ задания связи элемента составного значения с одной или несколькими позициями с помощью их именования.
Именуемая компонента (selected component) — имя, состоящее из префикса и идентификатора, называемого постфиксом. Именуемые компоненты используются для обозначения компонент записей, входов и объектов, указанных ссылочными значениями; они также используются как расширенные имена.
Именуемый тип (record type) — составной тип из именованных различными идентификаторами компонент, которые обычно бывают различных типов или подтипов. Для каждой компоненты значения записи или объекта-записи в определении именуемого типа задается идентификатор, который однозначно определяет компоненту записи.
Имя (name) — средство представления понятия. Говорят, что имя обозначает понятие и что понятие является смыслом имени. См. также описание, префикс.
Индекс (index), см. индексируемый тип.
Индексируемая компонента (indexed component) — форма имени, содержащая выражения, которые задают значения индексов компоненты массива. Индексируемая компонента обозначает компоненту массива. Индексируемая компонента может также обозначать вход в семействе входов.
Индексируемый тип (array type) — составной тип из компонент одного и того же подтипа (и следовательно, одного и того же типа). Каждая компонента однозначно идентифицируется индексом (для одномерного массива) или последовательностью индексов (для многомерного массива). Каждый индекс должен быть значением дискретного типа и принадлежать требуемому диапазону индексов.
Исключение (exception) — обозначение ошибочной ситуации, которая может произойти при выполнении программы и при этом будет зарегистрирована и обработана. Возбуждение исключения состоит в прекращении нормального выполнения программы, сигнализирующем о наличии ошибки. Обработчик исключения — это резервная часть программного текста, задающая реакцию на исключение. Выполнение этого программного текста называется обработкой исключения.
Квалифицированное выражение (qualified expression) — выражение, перед которым указан его тип или подтип. Используется для разрешения неоднозначности выражения (например, из-за совмещения).
Компилируемый модуль (compilation unit) — описание или тело программного модуля, предназначенные для компиляции в качестве самостоятельного текста. Перед ним может быть задан спецификатор контекста, включающего другие компилируемые модули, от которых зависит данный и имена которых указаны в спецификаторах совместимости.
Компонента (component) — значение, которое является частью более сложного значения, или объект, который является частью более сложного объекта.
Константа (constant), см. объект.
Лексема (lexical element) — лексический элемент, который может быть идентификатором, литералом, ограничителем или комментарием.
Лимитируемый тип (limited type) — тип, для которого не определены неявно описанные операции присваивания и предопределенного сравнения на равенство. Все заданные типы — лимитируемые. Личный тип может быть определен как лимитируемый. Для лимитируемого типа может быть явно описана операция сравнения на равенство.
Литерал (literal) — значение, явно выраженное буквами, цифрами или другими символами. Литерал — это одно из четырех: числовой литерал, литерал перечисления, символьный литерал или строковый литерал.
Личный раздел (private part), см. пакет.
Личный тип (private type) — тип, структура и набор значений которого явно определены, но непосредственно недоступны для пользователя. О личном типе известны только его дискриминанты (если они есть) и набор операций, определенных над его значениями. Личный тип и соответствующие операции определяются в видимом разделе пакета или в разделе формальных параметров настройки. Для личных типов, не являющихся лимитируемыми, определены также операции присваивания, сравнения на равенство и неравенство.
Модельное число (model number) — точно представляемое значение вещественного типа. Операции над вещественными типами определяются в терминах операций над модельными числами этих типов. Свойства модельных чисел и операции над ними являются минимальными свойствами, предписанными для всех реализации вещественных чисел.
Набор (collection) — вся совокупность объектов, создаваемых вычислением генераторов для некоторого ссылочного типа.
Настраиваемый модуль (generic unit) — шаблон для множества подпрограмм или пакетов. Создаваемые с использованием этого шаблона подпрограмма или пакет называются экземплярами данного настраиваемого модуля. Конкретизация настройки является видом описания, которое создает экземпляр. Настраиваемый модуль пишется в виде подпрограммы или пакета с предшествующим спецификации разделом формальных параметров настройки. Формальным параметром настройки является либо тип, либо подпрограмма, либо объект. Настраиваемый модуль — это один из видов программных модулей. Область действия (scope), см. описание. Обозначить (denote), см. описание. Обработчик (handler), см. исключение.
Объект (object) — понятие, которое обладает значением некоторого типа. Программа создает объект либо при предвыполнении описания объекта, либо при вычислении генератора. Описание или генератор задают тип объекта, объект может обладать значением только этого типа.
Офаничение (constraint) — средство выделения подмножества значений типа. Принадлежащее этому подмножеству значение удовлетворяет ограничению.
Ограничение диапазона (range constraint) — способ определения диапазона типа, т. е. подмножества значений этого типа, принадлежащих диапазону.
Ограничение дискриминанта (discriminant constraint) — способ определения дискриминанта для именуемого типа или личного типа.
Ограничение индекса (index constraint) — определение ограничения в задании нижней и верхней границ для каждого индекса индексируемого типа.
Оператор (statement) — синтаксическая конструкция, определяющая одно или несколько действий, реализуемых во время выполнения программы.
Оператор блока (block statement) — составной оператор, который может содержать последовательность операторов. Он может также содержать раздел описаний и обработчики исключений, которые являются локальными в данном операторе блока.
Оператор принятия (accept statement), см. вход.
Операция (operator) — ограничитель или зарезервированное слово, используемое для указания алгоритма преобразования значений одного или двух операндов в результат заданного типа. Унарную операцию записывают перед операндом; бинарную операцию — между двумя операндами. Операция — это специальный вид вызова функции. Операция может быть описана как функция. Многие операции неявно описываются описанием типа (например, большинство описаний типа подразумевает описание операции сравнения на равенство для значений этого типа).
Операция типа (operation) — элементарное действие, связанное с одним или несколькими типами. Операция типа [8] неявно описывается при описании этого типа либо является подпрограммой, которая имеет параметр или результат заданного типа.
Описание (declaration) — синтаксическая конструкция, которая связывает идентификатор (или другие' обозначения) с понятием. Это сопоставление внутри области текста, называемой областью действия описания. Внутри области действия описания существуют места использования идентификатора для ссылки на связанное с ним понятие. Идентификатор, употребляемый в таких местах, называется простым именем понятия; говорят, что имя обозначает связанное с ним понятие.
Описание переименования (renaming declaration) — описание другого имени понятия. Пакет (package) — программный модуль, который определяет группу логически связанных понятий, таких как типы, объекты этих типов и подпрограммы с параметрами этих типов. Пакет состоит из описания пакета и тела пакета. Описание пакета имеет видимый раздел, содержащий описания всех понятий, которые могут быть явно использованы вне пакета. Он может содержать также личный раздел с деталями реализации, которые заканчивают спецификацию видимых понятий, но которые недоступны для пользователя пакета. Тело пакета содержит реализации подпрограмм (и, возможно, задач), которые заданы в описании пакета. Пакет — это один из видов программного модуля.
Параметр (parameter) — одно из именованных понятий, связанных с подпрограммой, входом или настраиваемым модулем и используемых для связи с соответствующим телом подпрограммы, оператором принятия или настраиваемым телом. Формальный параметр — это идентификатор, используемый для обозначения именованного понятия в теле. Фактический параметр — это конкретное понятие, сопоставленное соответствующему формальному параметру при вызове подпрограммы, вызове входа или конкретизации настройки. Вид формального параметра определяет, поставляет ли фактический параметр значение для формального, или формальный параметр — для фактического, или и то и другое. Сопоставление фактическихпараметров формальным параметрам может быть определено с помощью именованного сопоставления, с помощью позиционного сопоставления или их комбинацией.
Переменная (variable), см. объект.
Перечислимый тип (enumeration type) — дискретный тип, значения которого представляются литералами перечисления, заданными явно в описании типа. Эти литералы перечисления являются либо идентификаторами, либо символьными литералами.
Плавающий тип (floating point type), см. вещественный тип.
Подкомпонента (subcomponent) — компонента либо компонента другой компоненты или подкомпоненты.
Подпрограмма (subprogram) — программный модуль, который может быть либо процедурой, либо функцией. Процедура определяет последовательность действий и вызывается с помощью вызова процедуры. Функция определяет последовательность действий, а также возвращает значение, называемое результатом, и, таким образом, вызов функции является выражением. Подпрограмма задается в виде описания подпрограммы, которое определяет ее имя, формальные параметры и (для функции) ее результат, и тело подпрограммы, которое определяет последовательность действий. В вызове подпрограммы задаются фактические параметры, которые сопоставляются с формальными параметрами. Подпрограмма — это один из видов программного модуля.
Подтип (subtype) — набор значений данного типа, определяемый ограничением типа. Каждое значение из множества значений подтипа принадлежит этому подтипу и удовлетворяет ограничению, определяющему подтип.
Позиционное сопоставление (positional association) — способ задания связи элемента с позицией, использующий позицию размещения элемента для определения этого элемента.
Постфикс (selector), см. именуемая компонента.
Прагма (pragma) — языковая конструкция для передачи информации компилятору.
Предвыполнение (elaboration) — процесс, применяемый к описанию, в результате которого описание выполняет свое назначение (например, создается объект). Этот процесс происходит при выполнении программы.
Префикс (prefix) — начальная часть некоторых видов имени. Префикс — это либо вызов функции, либо имя.
Присваивание (assignment) — базовая операция типа, заменяющая текущее значение переменной новым значением. Оператор присваивания определяет слева переменную, а справа — выражение, значение которого обязано стать новым значением переменной.
Программа (program) — совокупность из нескольких компилируемых модулей, один из которых является подпрограммой, называемой главной программой. Выполнение программы состоит из выполнения главной программы, которая может вызвать подпрограммы, описанные в других компилируемых модулях программы.
Программный модуль (program unit) — либо настраиваемый модуль, либо пакет, либо подпрограмма, либо задачный модуль.
Производный тип (derived type) — тип, значения и операции которого есть копии значений и операций существующего типа. Существующий тип называется родительским типом производного типа.
Простое имя (simple name), см. описание, имя.
Процедура (procedure), см. подпрограмма.
Прямая видимость (direct visibility), см. видимость.
Раздел вариантов (variant part) — определяет альтернативные компоненты записи в зависимости от значения дискриминанта записи. Каждое значение дискриминанта устанавливает одну из альтернатив раздела вариантов.
Раздел описаний (declarative part) — последовательность описаний. Он может также содержать логически связанную информацию, например тела подпрограмм и спецификаторы представления.
Рандеву (rendezvous) — взаимодействие между двумя параллельно выполняемыми задачами, когда одна задача вызвала вход другой задачи, и в вызванной задаче для этого вызова выполняется соответствующий оператор принятия.
Расширенное имя (expanded name) — способ обозначения понятия, которое описано непосредственно внутри некоторой конструкции. Расширенное имя имеет форму именуемой компоненты: префикс обозначает конструкцию {программный модуль или блок, цикл или оператор принятия}, постфикс — это простое имя понятия.
Родительский тип (parent type), см. производный тип.
Скалярный тип (scalar type) — упорядоченный набор значений с операциями отношения. К скалярному типу относится дискретный или вещественный тип. Объект или значение скалярного типа не имеет компонент.
Совмещение (overloading) — свойство понятия иметь несколько альтернатвпыл паопачо-ний в данной точке программного текста. Например, совмещенным литералом перечисления может быть идентификатор, который появляется в определениях нескольких перечислимых типов. Реальный смысл совмещенного идентификатора определяется по контексту. Совмещенными могут быть также подпрограммы, агрегаты, генераторы и строковые литералы.
Составной тип (composite type) — тип, значения которого имеют компоненты. Существуют две разновидности составного типа: индексируемые типы и именуемые типы.
Спецификатор использования (use clause) — средство, обеспечивающее прямую видимость описаний, которые находятся в видимых разделах именованных пакетов. Спецификатор контекста (context clause), см. компилируемый модуль. Спецификатор представления (representation clause) — средство указания компилятору отображения типа, объекта или задачи на архитектуру объектной машины, на которой выполняется программа. В некоторых случаях спецификаторы представления полностью определяют отображение, в других случаях они задают критерии выбора отображения. Спецификатор совместности (with clause), см. компилируемый модуль. Ссылочный тип (access type) — набор значений (ссылочные значения}, которые могут быть либо пустым значением, либо значением, указывающим объект, созданный генератором. Значение указанного объекта может быть прочитано или изменено через ссылочное значение. Определение ссылочного типа задает тип объектов, на которые указывают значения ссылочного типа. См. также набор.
Субмодуль (subunit), см. тело.
Тело (body) — конструкция, определяющая процесс выполнения подпрограммы, пакета, или задачи. След тела является синтаксической формой тела, которая указывает, что его выполнение определяется раздельно компилируемым субмодулем.
Тип (type) — набор значений и набор операций типа, применимых к этим значениям. Определение типа — это языковая конструкция, которой вводится тип. Конкретный тип — это ссылочный тип, индексируемый тип, личный тип, именуемый тип, скалярный тип или задачный тип.
Удовлетворять (satisfy), см. ограничение, подтип. Указывать (designate), см. ссылочный тип, задача. Фактический параметр (actual parameter), см. параметр. Фиксированный тип (fixed point type), см. вещественный тип. Формальный параметр (formal parameter), см. параметр. Функция (function), см. подпрограмма.
Целый тип (integer type) — дискретный тип, значения которого представляют все целые числа в заданном диапазоне.
Экземпляр (instance), см. настраиваемый мрдуль.
[8] Вместо термина "операция типа" в стандарте используется термин "операция", который не вызывает неоднозначности при его использовании в контексте. -- Прим. ред.
e. Сводка синтаксиса
f. Характеристики, зависящие от реализации
Определение языка Ада допускает машинную зависимость в контролируемых пределах. Не допускаются машинно-зависимые расширения, ограничения синтаксиса и семантики. Машинная зависимость допускается только в определенных реализацией прагмах и атрибутах, в машинно-зависимых соглашениях, перечисленных в гл. 13, а также в ограничениях на использование спецификаторов представления.
Справочное руководство по каждой реализации языка программирования Ада должно включать в себя такое приложение (называемое приложением F), которое описывает все характеристики, зависящие от реализации. В таком приложении для данной реализации должны быть перечислены:
1. Форма, допустимые места расположения и результат каждой зависящей от реализации прагмы.
2. Имя и тип каждого атрибута, зависящего от реализации.
3. Спецификация пакета SYSTEM (см. 13.7).
4. Список всех ограничений на спецификаторы представления (см. 13.1).
5. Соглашения об использовании генерируемых реализацией имен, обозначающих компоненты, зависящие от реализации (см. 13.4).
6. Интерпретация выражений, появляющихся в спецификаторах адреса, включая связанные с прерываниями (см. 13.5).
7. Любое ограничение на неконтролируемые преобразования (см. 2).
8. Любые зависящие от реализации особенности для пакетов ввода-вывода (см. 14).