Справочное руководство Ada 2005
A.1 Пакет Standard
Этот пункт описывает спецификацию пакета Standard, содержащего все предопределённые идентификаторы языка. Соответствующий пакет тела не определён языком.
Операторы, предопределённые для типов, объявленных в пакете Standard, приведены в комментариях, поскольку они объявляются неявно. Курсив используется для псевдонимов анонимных типов (например, root_real) и для неопределённой информации (например, implementation-defined).
Статическая семантика
Пакет Standard имеет следующее объявление:
package Standard is
pragma Pure(Standard);
pragma Pure(Standard);
type Boolean is (False, True);
-- Предопределённые реляционные операторы для этого типа:
-- function "=" (Left, Right : Boolean'Base) return Boolean;
-- function "/=" (Left, Right : Boolean'Base) return Boolean;
-- function "<" (Left, Right : Boolean'Base) return Boolean;
-- function "<=" (Left, Right : Boolean'Base) return Boolean;
-- function ">" (Left, Right : Boolean'Base) return Boolean;
-- function ">=" (Left, Right : Boolean'Base) return Boolean;
-- function "/=" (Left, Right : Boolean'Base) return Boolean;
-- function "<" (Left, Right : Boolean'Base) return Boolean;
-- function "<=" (Left, Right : Boolean'Base) return Boolean;
-- function ">" (Left, Right : Boolean'Base) return Boolean;
-- function ">=" (Left, Right : Boolean'Base) return Boolean;
-- Предопределённые логические операторы и оператор логического отрицания:
-- function "and" (Left, Right : Boolean'Base) return Boolean'Base;
-- function "or" (Left, Right : Boolean'Base) return Boolean'Base;
-- function "xor" (Left, Right : Boolean'Base) return Boolean'Base;
-- function "or" (Left, Right : Boolean'Base) return Boolean'Base;
-- function "xor" (Left, Right : Boolean'Base) return Boolean'Base;
-- function "not" (Right : Boolean'Base) return Boolean'Base;
-- Целочисленный тип root_integer и соответствующий универсальный тип universal_integer предопределены.
type Integer is range implementation-defined;
subtype Natural is Integer range 0 .. Integer'Last;
subtype Positive is Integer range 1 .. Integer'Last;
subtype Positive is Integer range 1 .. Integer'Last;
-- Предопределённые операторы для типа Integer:
-- function "=" (Left, Right : Integer'Base) return Boolean;
-- function "/=" (Left, Right : Integer'Base) return Boolean;
-- function "<" (Left, Right : Integer'Base) return Boolean;
-- function "<=" (Left, Right : Integer'Base) return Boolean;
-- function ">" (Left, Right : Integer'Base) return Boolean;
-- function ">=" (Left, Right : Integer'Base) return Boolean;
-- function "/=" (Left, Right : Integer'Base) return Boolean;
-- function "<" (Left, Right : Integer'Base) return Boolean;
-- function "<=" (Left, Right : Integer'Base) return Boolean;
-- function ">" (Left, Right : Integer'Base) return Boolean;
-- function ">=" (Left, Right : Integer'Base) return Boolean;
-- function "+" (Right : Integer'Base) return Integer'Base;
-- function "-" (Right : Integer'Base) return Integer'Base;
-- function "abs" (Right : Integer'Base) return Integer'Base;
-- function "-" (Right : Integer'Base) return Integer'Base;
-- function "abs" (Right : Integer'Base) return Integer'Base;
-- function "+" (Left, Right : Integer'Base) return Integer'Base;
-- function "-" (Left, Right : Integer'Base) return Integer'Base;
-- function "*" (Left, Right : Integer'Base) return Integer'Base;
-- function "/" (Left, Right : Integer'Base) return Integer'Base;
-- function "rem" (Left, Right : Integer'Base) return Integer'Base;
-- function "mod" (Left, Right : Integer'Base) return Integer'Base;
-- function "-" (Left, Right : Integer'Base) return Integer'Base;
-- function "*" (Left, Right : Integer'Base) return Integer'Base;
-- function "/" (Left, Right : Integer'Base) return Integer'Base;
-- function "rem" (Left, Right : Integer'Base) return Integer'Base;
-- function "mod" (Left, Right : Integer'Base) return Integer'Base;
-- function "**" (Left : Integer'Base; Right : Natural)
-- return Integer'Base;
-- return Integer'Base;
-- Спецификация каждого оператора для типа
-- root_integer, или для любого дополнительного предопределённого целочисленного
-- типа, получается заменой Integer именем типа в спецификации соответствующего оператора типа
-- Integer. Правый операнд оператора возведения в степень остаётся подтипом Natural.
-- root_integer, или для любого дополнительного предопределённого целочисленного
-- типа, получается заменой Integer именем типа в спецификации соответствующего оператора типа
-- Integer. Правый операнд оператора возведения в степень остаётся подтипом Natural.
-- Тип с плавающей точкой root_real и соответствующий универсальный тип universal_real предопределены.
type Float is digits implementation-defined;
-- Предопределённые операторы для этого типа:
-- 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 "/=" (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 "-" (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, Right : Float) return Float;
-- function "*" (Left, Right : Float) return Float;
-- function "/" (Left, Right : Float) return Float;
-- function "**" (Left : Float; Right : Integer'Base) return Float;
-- Спецификация каждого оператора для типа root_real, или для любого дополнительного предопределённого типа с плавающей точкой, получается заменой Float именем типа в спецификации соответствующего оператора типа Float.
-- Кроме того, следующие операторы предопределены для числовых типов root:
function "*" (Left : root_integer; Right : root_real)
return root_real;
return root_real;
function "*" (Left : root_real; Right : root_integer)
return root_real;
return root_real;
function "/" (Left : root_real; Right : root_integer)
return root_real;
return root_real;
-- Тип universal_fixed предопределён.
-- Единственными операторами умножения, определёнными между типами с фиксированной точкой, являются
-- Единственными операторами умножения, определёнными между типами с фиксированной точкой, являются
function "*" (Left : universal_fixed; Right : universal_fixed)
return universal_fixed;
return universal_fixed;
function "/" (Left : universal_fixed; Right : universal_fixed)
return universal_fixed;
return universal_fixed;
-- Тип universal_access предопределён.
-- Следующие операторы равенства предопределены:
-- Следующие операторы равенства предопределены:
function "=" (Left, Right: universal_access) return Boolean;
function "/=" (Left, Right: universal_access) return Boolean;
function "/=" (Left, Right: universal_access) return Boolean;
-- Предопределённые операторы для типа Character такие же, как и для любого типа перечисления.
-- Объявление типа Wide_Character основано на стандартном наборе символов ISO/IEC 10646:2003 BMP. Первые 256 позиций имеют то же содержимое, что и тип Character. См. 3.5.2.
type Wide_Character is (nul, soh ... Hex_0000FFFE, Hex_0000FFFF);
type Wide_Character is (nul, soh ... Hex_0000FFFE, Hex_0000FFFF);
-- Объявление типа Wide_Wide_Character основано на полном наборе символов ISO/IEC 10646:2003. Первые 65536 позиций имеют то же содержимое, что и тип Wide_Character. См. 3.5.2.
type Wide_Wide_Character is (nul, soh ... Hex_7FFFFFFE, Hex_7FFFFFFF);
for Wide_Wide_Character'Size use 32;
type Wide_Wide_Character is (nul, soh ... Hex_7FFFFFFE, Hex_7FFFFFFF);
for Wide_Wide_Character'Size use 32;
-- Предопределённые типы строк:
type String is array(Positive range <>) of Character;
pragma Pack(String);
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, 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;
-- function "&" (Left: Character; Right: String) return String;
-- function "&" (Left: String; Right: Character) return String;
-- function "&" (Left: Character; Right: Character) return String;
тип Wide_String является массивом(Положительное диапазон <>) из Wide_Character;
pragma Pack(Wide_String);
pragma Pack(Wide_String);
-- Предопределённые операторы для этого типа соответствуют операторам для String.
тип Wide_Wide_String является массивом (Положительное диапазон <>)
из Wide_Wide_Character;
pragma Pack (Wide_Wide_String);
из Wide_Wide_Character;
pragma Pack (Wide_Wide_String);
-- Предопределённые операторы для этого типа соответствуют операторам для String.
тип Duration является дельта определяемая реализацией диапазон определяемая реализацией;
-- Предопределённые операторы для типа Duration совпадают с операторами для
-- любого типа с фиксированной точкой.
-- любого типа с фиксированной точкой.
-- Предопределённые исключения:
Constraint_Error: исключение;
Program_Error : исключение;
Storage_Error : исключение;
Tasking_Error : исключение;
Program_Error : исключение;
Storage_Error : исключение;
Tasking_Error : исключение;
конец Standard;
Стандарт не имеет закрытой части.
В каждом из типов Character, Wide_Character и Wide_Wide_Character, символьные литералы для пробела (позиция 32) и неразрывного пробела (позиция 160) соответствуют разным значениям. Если не указано иное, каждый символ пробела в этом Международном стандарте относится к пробелу. Аналогично, символьные литералы для дефиса (позиция 45) и мягкого дефиса (позиция 173) соответствуют разным значениям. Если не указано иное, каждый символ дефиса в этом Международном стандарте относится к дефису.
Динамическая семантика
Выполнение тела Standard не оказывает никакого эффекта.
Разрешения реализации
Реализация может предоставить дополнительные предопределённые целочисленные типы и дополнительные предопределённые типы с плавающей точкой. Не все эти типы должны иметь имена.
Рекомендации для реализации
Если реализация предоставляет дополнительные именованные предопределённые целочисленные типы, то имена должны заканчиваться на «Целое», как в «Длинное_Целое». Если реализация предоставляет дополнительные именованные предопределённые типы с плавающей точкой, то имена должны заканчиваться на «Вещественное», как в «Длинное_Вещественное».
ПРИМЕЧАНИЯ
1 Некоторые аспекты предопределённых сущностей не могут быть полностью описаны в самом языке. Например, хотя перечислимый тип Boolean можно записать, показывая два перечислимых литерала False и True, краткие управляющие формы не могут быть выражены на языке.
2 Как объясняется в 8.1, «Область объявления» и 10.1.4, «Процесс компиляции», область объявления пакета Standard охватывает каждый единицу библиотеки и, следовательно, главную подпрограмму; объявление каждой единицы библиотеки предполагается происходящим внутри этой области объявления. Library_itemы предполагаются упорядоченными таким образом, что нет никаких прямых семантических зависимостей. Однако, как объясняется в 8.3, «Видимость», единственными единицами библиотек, которые видны внутри данного модуля компиляции, являются единицы библиотек, указанные всеми with_clauses, которые применяются к данному модулю, и кроме того, внутри области объявления данной единицы библиотеки, сама единица библиотеки.
3 Если все block_statementы программы имеют имена, то имя каждой единицы программы всегда может быть записано как полное имя, начинающееся со Standard (если Standard не скрыт). Имя единицы библиотеки не может быть омографом имени (например, Integer), уже объявленного в Standard.
4 Исключение Standard.Numeric_Error определено в J.6.