Spec-Zone.ru › Ada 2012
Справочник по Ada 2012

A.1 Пакет Standard

Этот подпункт описывает спецификацию пакета Standard, содержащего все предопределённые идентификаторы языка. Соответствующий пакет тела не определён языком.
Операторы, предопределённые для типов, объявленных в пакете Standard, приведены в комментариях, так как они неявно объявлены. Курсив используется для псевдоимён анонимных типов (например, root_real) и для неопределённой информации (например, implementation-defined).

Статическая семантика

Библиотечный пакет Standard имеет следующее объявление:
package Standard is
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 "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 "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;
-- Предопределённые операторы для типа 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 "+" (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 : Integer'Base; Right : Natural)
-- return Integer'Base;
-- Спецификация каждого оператора для типа
-- 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 "+" (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'Base) return Float;
-- Спецификация каждого оператора для типа root_real, или для
-- любого дополнительного предопределённого типа с плавающей
-- точкой, получается заменой Float именем типа в спецификации
-- соответствующего оператора типа Float.
-- Кроме того, следующие операторы предопределены для типов
-- числовых типов:
function "*" (Left : root_integer; Right : root_real)
return root_real;
function "*" (Left : root_real; Right : root_integer)
return root_real;
function "/" (Left : root_real; Right : root_integer)
return root_real;
-- Тип universal_fixed предопределён.
-- Единственными операторами умножения, определёнными между
-- типами с фиксированной точкой, являются
function "*" (Left : universal_fixed; Right : universal_fixed)
return universal_fixed;
function "/" (Left : universal_fixed; Right : universal_fixed)
return universal_fixed;
-- Тип universal_access предопределён.
-- Следующие операторы равенства предопределены:
function "=" (Left, Right: universal_access) return Boolean;
function "/=" (Left, Right: universal_access) return Boolean;
-- Предопределённые операторы для типа Character такие же, как для
-- любого типа перечисления.
-- Объявление типа Wide_Character основано на стандартном наборе символов ISO/IEC 10646:2011 BMP. Первые 256 позиций имеют то же содержание, что и тип Character. См. 3.5.2.

type Wide_Character is (nul, soh ... Hex_0000FFFE, Hex_0000FFFF);
-- Объявление типа Wide_Wide_Character основано на полном
-- наборе символов ISO/IEC 10646:2011. Первые 65536 позиций имеют
-- то же содержание, что и тип Wide_Character. См. 3.5.2.

type Wide_Wide_Character is (nul, soh ... Hex_7FFFFFFE, Hex_7FFFFFFF);
for Wide_Wide_Character'Size use 32;
package ASCII is ... end ASCII; --Устаревший; см. J.5

-- Предопределённые типы строк:

type String is array(Positive range <>) of Character
with Pack;
-- Предопределённые операторы для этого типа:
-- 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;
END_OF_DOCUMENT_MARKER
тип Wide_String является массивом(Положительный диапазон <>) из Wide_Character
с Упаковкой;
-- Предопределенные операторы для этого типа соответствуют операторам для String.
тип Wide_Wide_String является массивом (Положительный диапазон <>)
из Wide_Wide_Character
с Упаковкой;
-- Предопределенные операторы для этого типа соответствуют операторам для String.
тип Duration является дельта определяемой реализацией диапазон определяемой реализацией;
-- Предопределенные операторы для типа Duration такие же, как для
-- любого типа с фиксированной точкой.
-- Предопределенные исключения:
Constraint_Error: исключение;
Program_Error : исключение;
Storage_Error : исключение;
Tasking_Error : исключение;
конец Standard;
Standard не имеет закрытой части.
В каждом из типов Character, Wide_Character и Wide_Wide_Character символьные литералы для пробела (позиция 32) и неразрывного пробела (позиция 160) соответствуют различным значениям. Если не указано иное, каждый символ пробела ' ' в этом Международном стандарте относится к пробелу. Аналогично, символьные литералы для тире (позиция 45) и мягкого тире (позиция 173) соответствуют различным значениям. Если не указано иное, каждый символ тире '–' в этом Международном стандарте относится к символу тире.

Динамическая семантика

Выполнение тела Standard не имеет эффекта.

Разрешения реализации

Реализация может предоставить дополнительные предопределенные целочисленные типы и дополнительные предопределенные типы с плавающей точкой. Не все эти типы должны иметь имена.

Рекомендации для реализации

Если реализация предоставляет дополнительные именованные предопределенные целочисленные типы, то имена должны заканчиваться на «Целое», как в «Long_Целое». Если реализация предоставляет дополнительные именованные предопределенные типы с плавающей точкой, то имена должны заканчиваться на «Плавающее», как в «Long_Плавающее».
ПРИМЕЧАНИЯ
1 Некоторые аспекты предопределенных сущностей не могут быть полностью описаны в самом языке. Например, хотя тип перечисления Boolean может быть записан, показывая два литерала перечисления False и True, краткие управляющие формы не могут быть выражены на языке.
2 Как объяснено в 8.1, «Область объявления» и 10.1.4, «Процесс компиляции», область объявления пакета Standard включает каждый модуль библиотеки и, следовательно, главную подпрограмму; объявление каждого модуля библиотеки предполагается в этой области объявления. Library_item предполагается упорядоченными таким образом, что нет никаких семантических зависимостей вперед. Однако, как объяснено в 8.3, «Видимость», единственные модули библиотеки, которые видимы внутри данного модуля компиляции, являются модулями библиотеки, указанными всеми with_clauses, которые применяются к данному модулю, и, более того, внутри области объявления данного модуля библиотеки, этот сам модуль библиотеки.
3 Если все block_statements программы имеют имена, то имя каждого программного модуля всегда может быть записано как расширенное имя, начинающееся со Standard (если сам Standard не скрыт). Имя модуля библиотеки не может быть омографом имени (таким как Integer), которое уже объявлено в Standard.
4 Исключение Standard.Numeric_Error определено в J.6.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API