Ада-95. Компилятор GNAT

         

Атрибуты типов


В данном приложении перечислены атрибуты типов Ады, и дано их краткое описание. Следует заметить, что при описании атрибутов типов, терминология несколько упрощена. В частности, вместо термина "подтип" используется термин "тип", что не всегда правильно (например, для вещественных типов с плавающей точкой).



Атрибуты типов определенные в реализации компилятора GNAT


Список атрибутов типов определенных .

Standard'Abort_Signal

 - 

где Standard - единственно возможный префикс.

Предусматривает сущность для специального исключения, которая используется при принудительном завершении задачи или асинхронной передаче управления.

Обычно, этот атрибут должен использоваться только в окружении задачи

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

   

Standard'Address_Size

 - 

где Standard - единственно возможный префикс.



Статическая константа представляющая количество битов в представлении адреса ('Address). Ее первичное предназначение - построение описания Memory_Size

в пакете Standard, однако она может быть свободно использована в программах пользователя.

   

'Asm_Input

 - 

Определяет функцию которая принимает два параметра. Первый параметр - это строка, а второй параметр - это выражение типа определяемое префиксом. Первый параметр (строка) должен быть статическим выражением и является ограничением для параметра (например, указывает требуемый регистр процессора). Второй аргумент это значение которое будет использоваться как аргумент ввода. Допустимые значения для констант будут такими же как и используемые в RTL, и они зависят от файла конфигурации который был использован для построения генератора кода GCC (GCC back end).

   

'Asm_Output

 - 

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

Допустимые значения для констант будут такими же как и используемые в RTL, и они зависят от файла конфигурации который был использован для построения генератора кода GCC (GCC back end).



Если операнды вывода отсутствуют, то аргумент может быть опущен или явно указан как No_Output_Operands.
   
'AST_Entry  -  Этот атрибут реализован только для работы с OpenVMS версией GNAT.
   
obj'Bit  -  где obj: любой объект. Возвращает битовое смещение в элементе памяти (как правило байте) в котором находится первый бит пространства размещенного для объекта obj. Возвращаемое этим атрибутом значение имеет тип Universal_Integer, величина которого всегда не отрицательна и не достигает величины System.Storage_Unit. Для объектов, которые являются переменными или константами размещаемыми в регистре возвращаемое значение - нуль (использование этого атрибута не обязывает размещать переменные в памяти). Для объектов, которые являются формальными параметрами, этот атрибут применяется как для совпадающего фактического параметра, так и для копии совпадающего фактического параметра. Для ссылочных объектов, возвращаемое значение - нуль. Примечательно, что obj.all'Bit является объектом проверки Access_Check для обозначенного объекта. Подобным образом, этот атрибут для компонента записи X.C'Bit является объектом проверки дискриминанта, а в случае массива X(I)'Bit или X(I1..I2)'Bit - объектом проверки индекса. Этот атрибут был разработан для совместимости с описанием и реализацией атрибута 'Bit в DEC Ada 83.
   
'Bit_Position  -  R.C'Bit где R - это запись, а C - это одно из полей типа записи, возвращает битовое смещение внутри записи, которое содержит первый бит пространства размещенного для объекта. Возвращаемое этим атрибутом значение имеет тип Universal_Integer. Величина значения зависит только от указанного поля типа записи C и не зависит от выравнивания.
   
'Code_Address  - 
Атрибут 'Address может быть применен для подпрограмм Ады, но предполагаемый эффект, согласно руководства по языку (RM-95), должен предусматривать адресное значение, которое может быть использовано для вызова подпрограммы подразумевая использование адресного выражения как в данном примере:


procedure K is ... procedure L; for L'Addressuse K'Address; pragma Import (Ada, L); После чего вызов L ожидается как результат вызова K. В Ada 83, где не предусматривалось ссылочных типов для подпрограмм, это был широко используемый прием для получения эффекта косвенного вызова. GNAT реализует показанное в примере выше использование атрибута 'Address, и подобные приемы работают правильно. Однако, в некоторых случаях, полезно иметь возможность получить значение адреса начала сгенерированного для подпрограммы кода. На некоторых архитектурах в этом нет необходимости, также как и в использовании приема показанного в примере выше. Например, значение 'Address может быть ссылкой на дескриптор подпрограммы, а не на саму подпрограмму. Атрибут 'Code_Address, который может быть использован только для подпрограмм, всегда возвращает адрес начала сгенерированного для указанной подпрограммы кода, который может соответствовать или не соответствовать значению которое возвращает атрибут 'Address.
   
Standard'Default_Bit_Order  -  где Standard - единственно возможный префикс. Предусматривает значение System.Default_Bit_Order как значение 'Pos (0 для High_Order_First, и 1 для Low_Order_First). Это используется для построения описания Default_Bit_Order в пакете System.
   
U'Elaborated  -  где U: имя модуля. Возвращаемое значение имеет тип Boolean и индицирует была ли выполнена элаборация указанного модуля. Этот атрибут первоначально был предназначен для внутреннего использования генерируемым кодом для проверки динамической элаборации, но он также может быть использован в программах пользователя. Возвращаемое значение всегда будет True, как только выполнена элаборация всех модулей.
   
P'Elab_Body  - 
где P: имя программного модуля.

Возвращает объекты для соответствующей процедуры элаборации для выполнения элаборации тела указанного модуля.

Атрибут используется в главной процедуре элаборации редактора связей (binder) и, обычно, не должен использоваться в любом другом контексте.


Однако, могут возникнуть какие-либо особенные ситуации в которых использование этого атрибута может оказаться полезным для получения возможности вызвать процедуру элаборации из кода Ады (например, в случае необходимости выполнения выборочной переэлаборации для исправления какой-либо ошибки).
   
P'Elab_Spec  -  где P: имя программного модуля. Возвращает объекты для соответствующей процедуры элаборации для выполнения элаборации спецификации указанного модуля. Атрибут используется в главной процедуре элаборации редактора связей (binder) и, обычно, не должен использоваться в любом другом контексте. Однако, могут возникнуть какие-либо особенные ситуации в которых использование этого атрибута может оказаться полезным для получения возможности вызвать процедуру элаборации из кода Ады (например, в случае необходимости выполнения выборочной переэлаборации для исправления какой-либо ошибки).
   
'Emax  -  Этот атрибут предусмотрен для совместимости с Ada 83.
   
S'Enum_Rep  - 
где S: перечислимый тип, объект перечислимого типа или несовмещенный перечислимый литерал.

Для перечислимого типа обозначает функцию, которая имеет следующую спецификацию:

function S'Enum_Rep (Arg : S'Base) return Universal_Integer;

Для объекта перечислимого типа или несовмещенного перечислимого литерала S'Enum_Rep эквивалентен T'Enum_Rep(S) где T - это тип перечислимого литерала или объекта S.

Функция возвращает значение внутреннего представления для указанного перечислимого значения, которое будет равно значению возвращаемому атрибутом 'Pos

если отсутствует спецификация представления.

Этот атрибут статический (то есть, результат статический, если аргумент статический).

Атрибут S'Enum_Rep также может быть использован для целочисленных типов и объектов.

В таких случаях, он просто возвращает целочисленное значение.

Смысл этого в том, чтобы разрешить его использование для дискретных формальных аргументов (<>) в настраиваемых модулях, которые могут быть конкретизированы как с перечислимыми типами, так и с целочисленными типами.
   
'Epsilon  -  Предусмотрен для обеспечения совместимости с Ada 83.
   
S'Fixed_Value  -  где S: вещественный тип с фиксированной точкой. Обозначает функцию, которая имеет следующую спецификацию: function S'Fixed_Value (Arg : Universal_Integer) return S; Возвращаемое значение V - это вещественное значение с фиксированной точкой, подобное: V = Arg * S'Small Таким образом, это эквивалентно: сначала, преобразованию аргумента в значение целочисленного типа, используемого для представления S, а затем, выполнению непроверяемого преобразования в вещественный тип с фиксированной точкой. Первоначально, этот атрибут был предназначен для реализации функций ввода/вывода для значений вещественного типа с фиксированной точкой.
   
T'Has_Discriminants  -  где T: тип. Возвращенное значение типа Boolean будет True в случае когда тип T имеет дискриминант, и False - в обратном случае. Предполагается использование этого атрибута совместно с описаниями настраиваемых модулей. Если атрибут используется с приватным настраиваемым типом, то он индицирует имеет ли фактический тип дискриминант.
   
'Img  -  Этот атрибут отличается от стандартного атрибута 'Image тем, что он может быть использован как с объектами, так и с типами. В обоих случаях он возвращает 'Image для подтипа объекта. Это удобно для отладки: Put_Line ("X = " & X'Img); будет иметь такой же смысл, что и более "многословная" запись: Put_Line ("X = " & type'Image (X)); где type - это подтип объекта X.
   
S'Integer_Value  - 
где S: целочисленный тип.

Обозначает функцию, которая имеет следующую спецификацию:

function S'Integer_Value

(Arg : Universal_Fixed) return S;

Возвращаемое значение V подобно:

Arg = V * type'Small

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


Первоначально этот атрибут был предназначен для использования в функциях стандартного ввода/вывода для вещественных типов с фиксированной точкой.
   
'Large  -  Предусмотрен для обеспечения совместимости с Ada 83.
   
'Machine_Size  -  Этот атрибут идентичен атрибуту 'Object_Size и предусмотрен для совместимости с одноименным атрибутом компилятора DEC Ada 83.
   
'Mantissa  -  Предусмотрен для обеспечения совместимости с Ada 83.
   
Standard'Max_Interrupt_Priority  -  где Standard - единственно возможный префикс. Предоставляет значение System.Max_Interrupt_Priority и первоначально предназначен для построения этого описания в пакете System.
   
Standard'Max_Priority  -  где Standard - единственно возможный префикс. Предоставляет значение System.Max_Priority и первоначально предназначен для построения этого описания в пакете System.
   
Standard'Maximum_Alignment  -  где Standard - единственно возможный префикс. Предоставляет максимальное пригодное значение выравнивания для целевой платформы. Это статическое значение которое может быть использовано для указания требуемого выравнивания объектов. При этом во всех случаях будет гарантироваться правильность выравнивания объектов Это может быть полезно при импортировании внешних объектов, когда требования для их выравнивания не известны.
   
'Mechanism_Code  - 
function'Mechanism_Code

возвращает целочисленный код, который определяет используемый механизм для передачи результата вызова функции function, а subprogram'Mechanism_Code(n)

возвращает целочисленный код, который определяет используемый механизм для передачи формального параметра с порядковым номером n

(статическое целочисленное значение, 1 - подразумевает первый параметр) подпрограммы subprogram.



Смысл возвращаемых кодов следующий:

1  -  по значению (by copy / value)
2  -  по ссылке (by reference)
3  -  по дескриптору (by descriptor / default descriptor class)
4  -  по дескриптору (by descriptor / UBS: unaligned bit string)
5  -  по дескриптору (by descriptor / UBSB: aligned bit string with arbitrary bounds)
6  -  по дескриптору (by descriptor / UBA: unaligned bit array)
7  -  по дескриптору (by descriptor / S: string, also scalar access type parameter)
8  -  по дескриптору (by descriptor / SB: string with arbitrary bounds)
9  -  по дескриптору (by descriptor / A: contiguous array)
10  -  по дескриптору (by descriptor / NCA: non-contiguous array)
Значения 3-10 справедливы только для Digital OpenVMS реализации GNAT.     'Null_Parameter  -  Ссылка T'Null_Parameter

обозначает воображаемый объект типа T который размещается по нулевому машинному адресу. Этот атрибут допустим только для выражений в формальных параметрах по умолчанию или как фактическое выражение вызова подпрограммы. В обоих случаях подпрограмма должна быть импортированной.

Идентичность объекта представляется нулевым адресом в списке аргументов, вне зависимости от механизма передачи (явного или используемого по умолчанию).

Такая возможность необходима для спецификации того, что нулевой адрес должен быть передан для записи или другого составного объекта передаваемого по ссылке. Другого способа такой индикации, без использования атрибута 'Null_Parameter, не существует.     'Object_Size  -  Размер какого-либо объекта не обязан быть таким же самым как размер типа объекта, поскольку размер объекта по умолчанию увеличен в соответствии с выравниванием объекта.

Например, Natural'Object_Size

равен 31 бит, а размер объекта типа Natural по умолчанию будет иметь размер 32 бита. Подобным образом, запись которая содержит Integer и Character:

type Rec is record

I : Integer; C : Character; end record;

будет иметь размер 40 бит (Rec'Size будет 40 бит; выравнивание будет 4, из-за поля типа Integer; таким образом размер записи этого типа по умолчанию будет 64 бита или 8 байт).

Атрибут T'Object_Size был добавлен к реализации GNAT, чтобы обеспечить легкое определение размера объекта типа T по умолчанию.

Например Natural'Object_Size равен 32 бита, а Rec'Object_Size (для записи из примера) будет 64.

Примечательно также то, что в отличие от ситуации с атрибутом 'Size

который описан в руководстве по языку, атрибут 'Object_Size может быть определен индивидуально для различных подтипов. Например:

type R is new Integer; subtype R1 is R range 1 .. 10; subtype R2 is R range 1 .. 10; for R2'Object_Size use 8;

В этом примере R'Object_Size и R1'Object_Size, оба равны 32, поскольку размер объекта по умолчанию для подтипа такой же как и размер для подтипа-предка.

Это подразумевает, что размер по умолчанию для объектов с типами R и R1

будет 32 бита (4 байта).

Но объекты типа R2 будут иметь только 8 бит (1 байт), поскольку R2'Object_Size был установлен в 8.     T'Passed_By_Reference  -  где T: тип.

Возвращает значение типа Boolean которое равно True если тип T

может быть нормально передан по ссылке и False если тип T

может быть нормально передан по значению при вызове. Для скалярных типов результат всегда будет False и является статическим. Для не скалярных типов, результат - не статический.     T'Range_Length  -  где T: любой дискретный тип.

Возвращает число значений представляемых типом (нуль, в случае пустого диапазона значений). Результат статический для статических типов. Этот атрибут применяется для типов индекса одномерных массивов и дает те же результаты, что и атрибут 'Range

для того же массива.     'Safe_Emax  -  Предусмотрен для обеспечения совместимости с Ada 83.     'Safe_Large  -  Предусмотрен для обеспечения совместимости с Ada 83.     'Small  -  Этот атрибут предусмотрен в Ada-95 только для вещественных типов с фиксированной точкой. GNAT, для обеспечения совместимости с Ada 83, допускает использование этого атрибута для вещественных типов с плавающей точкой.     Standard'Storage_Unit  -  где Standard - единственно возможный префикс.

Предоставляет значение System.Storage_Unit

и первоначально предназначен для построения этого описания в пакете System.     Standard'Tick  -  где Standard - единственно возможный префикс.

Предоставляет значение System.Tick

и первоначально предназначен для построения этого описания в пакете System.     System'To_Address  -  где System - единственно возможный префикс.

Обозначает функцию которая идентична System.Storage_Elements.To_Address

с тем исключением, что это статический атрибут.

Это подразумевает, что подобное выражение может быть использовано в контексте (например, при преэлаборации пакета) который требует использования статических выражений и где не может быть использован вызов функции (поскольку вызов функции всегда является не статическим, даже при статических аргументах).     T'Type_Class  -  где T: любой тип.

Возвращает значение класса типа для типа T.

Если тип T является настраиваемым типом, то возвращаемое значение будет значением соответствующего фактического типа.

Значение этого атрибута имеет тип System.Aux_DEC.Type_Class, который имеет следующее описание:

type Type_Class is

(Type_Class_Enumeration, Type_Class_Integer, Type_Class_Fixed_Point, Type_Class_Floating_Point, Type_Class_Array, Type_Class_Record, Type_Class_Access, Type_Class_Task, Type_Class_Address);

Защищенные типы возвращают значение Type_Class_Task, которое, таким образом, подходит для всех многозадачных типов. Этот атрибут был разработан для обеспечения совместимости с одноименным атрибутом компилятора DEC Ada 83.     P'UET_Address  -  где P: библиотечный пакет.

Возвращает адрес таблицы исключений модуля при использовании обработки исключений без потерь производительности.

Этот атрибут предназначен для использования только с реализацией GNAT.

См. модуль Ada.Exceptions в файлах "a-except.ads" и "a-except.adb" для получения более полной информации о том как эти атрибуты используются в реализации.     N'Universal_Literal_String  -  где N: именованное число.

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

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

Это имеет внутреннее использование для построения значений вещественных атрибутов с плавающей точкой из файла "ttypef.ads", но может быть также использовано в программах пользователя.     'Unrestricted_Access  -  Этот атрибут подобен атрибуту 'Access, за исключением того, что отсутствуют проверка на доступность и проверка представления косвенного доступа.

Ответственность за правильность использования полностью возлагается на пользователя.

Это подобно атрибуту 'Addess, для которого необходима замена в тех случаях, когда требуемое значение должно иметь ссылочный тип.

Другими словами, эффект действия этого атрибута идентичен первоначальному получению атрибута 'Addess

с последующим непроверяемым преобразованием в требуемое значение ссылочного типа.

В GNAT, но не обязательно в других реализациях, использование статической цепочки для подпрограмм внутреннего уровня подразумевает, что 'Unrestricted_Access, примененный для подпрограммы, возвращает значение, которое может быть вызвано пока подпрограмма находится в области действия (видимости).

Нормальные правила доступа/видимости в Ada 95 ограничивают такое использование.     'VADS_Size  -  Для обеспечения совместимости с компилятором VADS Ada 83.

    T'Value_Size  -  где T: тип.

Возвращает число бит, которое требуется для представления значений указанного типа T.

Это то же самое, что и T'Size, но в отличие от 'Size, может быть установлено для не первого подтипа.     Standard'Wchar_T_Size  -  где Standard - единственно возможный префикс.

Предоставляет битовый размер типа wchar_t языка C

и первоначально предназначен для построения этого типа в пакете Interfaces.C.

Примечание: отсутствует в реализации GNAT V 3.13p.     Standard'Word_Size  -  где Standard - единственно возможный префикс.

Предоставляет значение System.Word_Size

и первоначально предназначен для построения этого описания в пакете System.

Директивы компилятора (pragma)


В данном приложении приводится краткое описание директив компилятора. Более подробное описание использования этих директив содержится в справочных руководствах по языку программирования Ада и по реализации компилятора GNAT.



Директивы определенные в реализации компилятора GNAT


Abort_Defer;  -  откладывает принудительное завершение до конца блока инструкций (должна быть помещена в начале блока инструкций)
   
Ada_83;  -  использовать при компиляции исходного текста соглашения стандарта Ada83, даже если переключатели опций компилятора указывают обратное
   
Ada_95;  -  использовать при компиляции исходного текста соглашения стандарта Ada95, даже если переключатели опций компилятора указывают обратное
   
Annotate(
 identifier{, name|expression});
 -  Добавить дополнительную информацию для внешних инструментальных средств
   
Assert(
 boolean_expression
 [, static_string_expression]);
 -  Вставить условие контрольной проверки
   
Ast_Entry(entry_identifier);  -  Реализована только для OpenVMS
   
C_Pass_By_Copy(
 [Max_Size =>] static_integer_expression);
 -  При вызове функции Си, использовать передачу параметра по значению (не по ссылке), если это возможно
   
Comment(static_string_expression);  -  То же самое, что и Ident
   
Common_Object(
   [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Size =>] external_symbol] )
 -  Для Фортрана. Создать переменную, которая использует общее пространство
   
Complex_Representation(
 [Entity =>] local_name);
 -  Использовать формат комплексных чисел gcc (для повышения скорости вычислений)
   
Component_Alignment(
  [Form =>] alignment_choice
 [, [Name =>] type_local_name]);
 -  Указывает как должно осуществляться выравнивание компонентов записи
   
CPP_Class([Entity =>] local_name);  -  Трактовать запись или тэговую запись как класс Си++
   
CPP_Constructor(
 [Entity =>] local_name);
 -  Трактовать импортируемую функцию как конструктор класса Си++
   
CPP_Destructor(
 [Entity =>] local_name);
 -  Трактовать импортируемую функцию как деструктор класса Си++
   
CPP_Virtual(
  [Entity =>] entity,
 [, [Vtable_Ptr =>] vtable_entity,]
 [, [Position =>] static_integer_expression]);
 -  Импортировать виртуальную функцию Си++
   
CPP_Vtable(
  [Entity =>] entity,
 [, [Vtable_Ptr =>] vtable_entity,]
 [, [Entry_Count =>] static_integer_expression]);
 -  Определить таблицу виртуальных функций
   
Debug(procedure_call_statement);  -  Определить вызов отладочной процедуры
   
Eliminate([Unit_Name =>] identifier);  -  Указать объект который не используется программой. Создается утлитой gnatelim

   
Export_Exception(
  [Internal =>] local_name,
 [, [External =>] external_symbol,]
 [, [Form =>] Ada | VMS]
 [, [Code =>] static_integer_expression]);
 -  Реализована только для OpenVMS
   
Export_Function(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Result_Type =>] result_subtype_mark]
 [, [Mechanism =>] mechanism]
 [, [Result_Mechanism =>] mechanism_name]);
 -  Экспортировать Ада-функцию с указанием дополнительной информации по отношению к информации представленной директивой Export

   
Export_Object(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Size =>] external_symbol]);
 -  Экспортировать тэговую запись Ады с указанием дополнительной информации по отношению к информации представленной директивой Export

   
Export_Procedure(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Result_Type =>] result_subtype_mark]
 [, [Mechanism =>] mechanism]);
 -  Экспортировать Ада-процедуру с указанием дополнительной информации по отношению к информации представленной директивой Export

   
Export_Valued_Procedure(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Result_Type =>] result_subtype_mark]
 [, [Mechanism =>] mechanism]);
 -  Экспортировать Ада-функцию обладающую побочными эффектами с указанием дополнительной информации по отношению к информации представленной директивой Export

   
Extend_System([Name =>] identifier);  -  устарела
   
External_Name_Casing(
 Uppercase | Lowercase
 [, Uppercase | Lowercase | As_Is]);
 -  Установить режим перевода в символы верхнего регистра для импорта в регистрозависимый язык. Может быть установлено в Uppercase, Lowercase или As_Is

(по-умолчанию для gnst).

   
Finalize_Storage_Only(
 first_subtype_local_name);
 -  Не выполнять очистку (Finalize) для объектов описанных на уровне библиотеки. Изначально предназначено для внутреннего использования в реализации компилятора gnat.
   
Float_Representation(float_rep);  -  Реализована только для OpenVMS
   
Ident(static_string_expression);  -  Строка идентификации объектного файла (в Linux, значения не имеет)
   
Import_Exception(
  [Internal =>] local_name,
 [, [External =>] external_symbol,]
 [, [Form =>] Ada | VMS]
 [, [Code =>] static_integer_expression]);
 -  Реализована только для OpenVMS
   
Import_Function(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Result_Type =>] result_subtype_mark]
 [, [Mechanism =>] mechanism]
 [, [Result_Mechanism =>] mechanism_name]
 [, [First_Optional_Parameter =>] identifier]);
 -  Импортирует функцию, описанную средствами другого языка программирования, для использования ее в Ада-программе. При этом указывает дополнительную информацию по отношению к информации представленной директивой Import.
   
Import_Object(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Size =>] external_symbol]);
 -  Импортирует объект, описанный средствами другого языка программирования, для использования его в Ада-программе. При этом указывает дополнительную информацию по отношению к информации представленной директивой Import.
   
Import_Procedure(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Mechanism =>] mechanism]
 [, [First_Optional_Parameter =>] identifier]);
 -  Импортирует процедуру, описанную средствами другого языка программирования, для использования ее в Ада-программе. При этом указывает дополнительную информацию по отношению к информации представленной директивой Import.
   
Import_Valued_Procedure(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Mechanism =>] mechanism]
 [, [First_Optional_Parameter =>] identifier]);
 -  Импортирует функцию обладающую побочными эффектами, которая описана средствами другого языка программирования, для использования ее в Ада-программе. При этом указывает дополнительную информацию по отношению к информации представленной директивой Import.
   
Inline_Always(name[, name]);  -  Указывает, на необходимость выполнения межмодульной inline-подстановки не зависимо от состояния переключателей опций компилятора.
   
Inline_Generic(generic_package_name);  -  Введена для совместимости с другими Ада-компиляторами
   
Interface(
  [Convention =>] convention_identifier,
  [Entity =>] local_name
 [, [External_Name =>] static_string_expression],
 [, [Link_Name =>] static_string_expression]);
 -  Введена для совместимости с другими Ада-компиляторами
   
Interface_Name(
  [Entity =>] local_name
 [, [External_Name =>] static_string_expression]
 [, [Link_Name =>] static_string_expression]);
 -  Введена для совместимости с другими Ада-компиляторами
   
Linker_Alias(
 [Entity =>] local_name
 [Alias =>] static_string_expression);
 -  Определяет альтернативный компоновщик (linker) для указанного пакета (или другого компонуемого модуля).
   
Linker_Section(
 [Entity =>] local_name
 [Section =>] static_string_expression);
 -  Указание компоновщику gcc использовать соответствующую секцию для указанного имени
   
Long_Float(float_format);  -  Реализована только для OpenVMS
   
Machine_Attribute(
 [Attribute_Name =>] string_expression,
 [Entity =>] local_name);
 -  Определяет атрибуты машины для gcc.
   
Main_Storage(
 main_storage_option [, main_storage_option]);
 -  Реализована только для OpenVMS
   
No_Run_Time;  -  Указать компилятору gnat не использовать библиотеку времени выполнения (например, в случае написания драйвера устройства).
   
No_Return(procedure_local_name);  -  Указывает процедуру, которая преднамеренно не возвращает управление. Предназначена для подавления предупреждающих сообщений компилятора.
   
Passive([Semaphore | No]);  -  Введена для совместимости с другими Ада-компиляторами
   
Polling(On | Off);  -  Если включена, то разрешает опрос исключений
   
Propagate_Exceptions(subprogram_local_name);  -  Определяет импортированную подпрограмму, которая будет обрабатывать исключения Ады (без потерь производительности).
   
Psect_Object(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Size =>] external_symbol]);
 -  То же самое, что и Common_Object.
   
Pure_Function([Entity =>] function_local_name);  -  Указывает, что функция не имеет побочных эффектов.
   
   
Ravenscar;  -  Устанавливает политику реального времени RAVENSCAR
   
Restricted_Run_Time;  -  Подобно директиве Ravenscar, устанавливает некоторые ограничения на программирование задач реального времени
   
Share_Generic(name {, name});  -  Введена для совместимости с другими Ада-компиляторами
   
Source_File_Name(
 [Unit_Name =>] unit_name,
 [FNAME_DESIG =>] string_literal);
 -  Переопределяет традиционные для реализации компилятора gnat правила именования файлов.
   
Source_Reference(
 integer_literal, string_literal);
 -  Применяется для совместного использования с утилитой gnatchop.
   
Stream_Convert(
 [Entity =>] type_local_name,
 [Read =>] function_name,
 [Write =>] function name);
 -  Упрощает создание подпрограмм потокового ввода/вывода для указанного типа данных
   
Style_Checks(
 string_literal | ALL_CHECKS |
 On | Off [, local_name]);
 -  Указывает реализации компилятора gnat выполнять проверку стиля оформления исходных текстов (если включено в процессе компиляции).
   
Subtitle([Subtitle =>] string_literal);  -  Введена для совместимости с другими Ада-компиляторами
   
Suppress_All;  -  Введена для совместимости с другими Ада-компиляторами
   
Suppress_Initialization([Entity =>] type_name);  -  Запретить инициализацию переменных указанного типа данных
   
Task_Info(expression);  -  Определяет информацию о задаче.
   
Task_Name(string_expression);  -  Определяет имя задачи.

Примечание: отсутствует в реализации GNAT V 3.13p.

   
Task_Storage(
 [Task_Type =>] local_name,
 [Top_Guard =>] static_integer_expression);
 -  Определяет "охранное" пространство для задачи.
   
Time_Slice(static_duration_expression);  -  Определяет квант времени задачи (tasking time slice) для главной программы
   
Title(titling_option [, titling option]);  -  Введена для совместимости с другими Ада-компиляторами
   
Unchecked_Union(first_subtype_local_name);  -  Трактовать запись как тип объединения (union) языка Си.
   
Unimplemented_Unit;  -  Предназначена для использования в не законченных модулях. Порождает генерацию ошибки при компиляции такого модуля.
   
Unreserve_All_Interrupts;  -  Позволяет переназначение прерываний, которые обычно обрабатываются реализацией компилятора gnat (например SIGINT).
   
Unsuppress(identifier [, [On =>] name]);  -  Обладает эффектом, противоположным директиве Suppress.
   
Use_VADS_Size  -  Для старого Ада-кода. атрибут 'Size

эквивалентен атрибуту 'VADS_Size.

   
Warnings(On | Off [, local_name]);  -  Включает или выключает генерацию предупредительных сообщений компилятором.
   
Weak_External([Entity =>] local_name);  -  Определяет объект, который не должен распознаваться компоновщиком.

Copyright (C) А.Гавва V-0.4w май 2004



Глоссарий


Это дополнение содержит пояснение терминов и понятий используемых в стандарте Ada-95, и соответствует информации представленной в дополнении N (Annex N) стандарта Ada-95.

N п/п

Английский термин

Русский эквивалент

Описание

 
       
1   Access type   Ссылочный тип   Ссылочный тип определяет значения которые указывают на объекты с косвенным доступом. Ссылочные типы соответствуют "указателям" или "ссылкам" в некоторых других языках программирования.
       
2   Aliased   Объект с косвенным доступом   Косвенный доступ к представлению объекта может быть получен с помощью значения ссылочного типа. Динамические объекты, которые размещаются с помощью аллокаторов, являются объектами с косвенным доступом. Статический объект может быть также явно описан как объект с косвенным доступом путем использования зарезервированного слова aliased в описании объекта. В этом случае, для получения значения ссылочного типа, указывающего на объект с косвенным доступом, может быть использован атрибут 'Access.
       
3   Array type   Тип массива   Составной тип, который состоит из компонентов одного и того же типа. Выбор индивидуальных компонентов осуществляется путем индексирования.
       
4   Character type   Символьный тип   Символьный тип - это перечислимый тип значениями которого являются символы.
       
5   Class   Класс   Класс - это набор типов которые объединены одной иерархией наследования. Это подразумевает, что если указанный тип принадлежит классу, то все типы, производные от этого типа, также принадлежат этому классу. Множество типов одного класса обладает одинаковыми свойствами, такими как одинаковые примитивные операции.
       
6   Compilation unit   Компилируемый модуль   Текст программы может быть представлен компилятору для одной или более компиляций. Каждая компиляция - это последовательность компилируемых модулей. Компилируемый модуль содержит или описания, или тело, или переименование программного модуля.
       
7   Composite type   Составной тип   Составной тип имеет компоненты.
       
8   Construct   Конструкция   Конструкция - это кусок текста (явный или неявный), являющийся экземпляром синтаксической категории, которая определена в разделе синтаксиса.
       
9   Controlled type   Контролируемый тип   Контролируемый тип поддерживает определяемые пользователем подпрограммы присваивания (инициализации) и очистки. Такие объекты всегда перед разрушением выполняют очистку.
       
10   Declaration   Описание   Описание - это языковая конструкция, которая ассоциирует имя с сущностью (с представлением сущности). Описание в тексте программы может присутствовать явно (явное описание), или может подразумеваться как присутствующее в данном месте текста программы как семантический результат других конструкций (неявное описание).
       
11   Definition   Определение   Все определения содержат определения для представления какой-либо сущности. Представление состоит из какой-либо идентификации сущности (сущность представления), плюс специфических для представления характеристик которые влияют на использование сущности посредством такого представления (например, режим доступа к объекту, имена формальных параметров и их значения по умолчанию для подпрограммы, или видимость/доступность компонентов типа). В большинстве случаев, определение также содержит определение для самой сущности (определение_переименования является примером определения которое не определяет новую сущность, но определяет представление существующей сущности, см. RM-95 8.5).
       
12   Derived type   Производный тип   Производный тип - это тип объявленный в терминах другого типа, который является типом-предком для производного типа. Каждый класс содержащий тип-предок также содержит производный тип. Производный тип наследует свойства, такие как компоненты и примиривные операции типа-предка. Любой тип вместе с производными от него типами (прямо или косвенно) формируют образование класса.
       
13   Discrete type   Дискретный тип   Любой дискретный тип это или любой целочисленный тип, или любой перечислимый тип. Например, дискретные типы могут быть использованы в инструкциях выбора (case) или как индексы массивов.
       
14   Discriminant   Дискриминант   Дискриминант - это параметр составного типа. Например, он может управлять границами компонента типа если такой тип - это тип массива. Дискриминант задачного типа может быть использован для передачи данных во время создания фактического объекта задачного типа (иначе, задаче).
       
15   Elementary type   Элементарный тип   Любой элементарный тип не содержит компоненты.
       
16   Enumeration type   Перечислимый тип   Любой перечислимый тип - это тип который определен перечислением его значений, которые могут быть именованы идентификаторами или символьными литералами.
       
17   Exception   Исключение   Любое исключение представляет какую-либо исключительную ситуацию, а возникновение такой ситуации (во время выполнения программы) называют возникновением исключения. Возбуждение исключения используется для прекращения нормальной последовательности исполнения программы для предупреждения о факте наличия соответствующей ситуации. Выполнение некоторых действий, в ответ на возникшее исключение, называют обработкой исключения.
       
18   Execution   Исполнение   Процесс при котором проявляется действие какой-либо конструкции языка, во время выполнения программы, называют исполнением. Исполнение описаний называют элаборацией. Исполнение выражений называют вычислением.
       
19   Generic unit   Настраиваемый модуль   Настраиваемый модуль - это шаблон для построения (ненастраиваемого) программного модуля. Такой шаблон может быть параметризован объектами, типами, подпрограммами и пакетами. Экземпляр настроенного модуля может быть получен путем конкретизации настраиваемого модуля. Правила языка, при компиляции настраиваемого модуля, требуют использования контрактной модели настройки. При конкретизации настраиваемого модуля выполняются дополнительные проверки соблюдения контрактной модели. Таким образом, описание настраиваемого модуля представляет контракт между телом настраиваемого модуля и экземпляром настроенного модуля. Настраиваемые модули могут быть использованы в качестве макросов, используемых другими языками программирования.
       
20   Integer type   Целочисленный тип   Целочисленные типы включают целочисленные типы со знаком и модульные типы. Целочисленный тип со знаком имеет базовый диапазон, который содержит положительные и отрицательные числа, и имеет операции, которые могут возбуждать исключения когда результат операции выходит за пределы базового диапазона значений. Модульные типы имеют базовый диапазон значений нижняя граница которого - нуль, и используют операции с "кольцевой" семантикой. Модульные типы можно отнести к целочисленным типам без знака, используемым другими языками программирования.
       
21   Library unit   Библиотечный модуль   Библиотечный модуль - это отдельно компилируемый программный модуль, которым может быть пакет, подпрограмма или настраиваемый модуль. Библиотечные модули могут иметь другие (логически находящиеся внутри) библиотечные модули как дочерние модули, а также могут иметь другие программные модули, которые размещаются внутри них физически. Любой корневой библиотечный модуль, вместе со своими дочерними модулями, формирует подсистему.
       
22   Limited type   Лимитированный тип   Лимитированный тип - это тип (представление типа) для которого не допускается использование операции присваивания. Нелимитированный тип - это тип (представление типа) для которого использование операции присваивания допускается.
       
23   Object   Объект   Объектом является константа или переменная. Любой объект содержит значение. Любой объект может быть создан при помощи описания_объекта или при помощи аллокатора. Любой формальный параметр - это объект (представление объекта). Компонент объекта - это также объект.
       
24   Package   Пакет   Пакеты - это программные модули, которые позволяют объединять группы логически связанных между собой сущностей. Обычно пакет содержит описание типа (часто приватного типа или приватного расширения типа) в совокупности с описаниями примитивных подпрограмм для этого типа, которые могут быть вызваны извне этого пакета. При этом внутренняя работа таких подпрограмм будет скрыта от внешних пользователей.
       
25   Partition   Раздел   Раздел - это часть программы. Каждый раздел состоит из набора библиотечных модулей. Каждый раздел может выполняться в собственном адресном пространстве, возможно на отдельном компьютере. Программа может содержать один раздел. Распределенная программа обычно содержит множество разделов, которые могут выполняться одновременно.
       
26   Pragma   Директива компилятора   Директивы компилятора предоставляют дополнительную информацию для оптимизации, управления листингом трансляции и т.д. Существуют директивы компилятора определенные стандартом языка. Конкретная реализация может поддерживать дополнительные директивы компилятора.
       
27   Primitive operations   Примитивные операции   Примитивные операции типа - это операции (такие как подпрограммы) описанные вместе с описанием типа. Они наследуются другими типами того же класса типов. Для тэговых типов, примитивные подпрограммы являются диспетчеризуемыми (перенаправляемыми) подпрограммами, предусматривающими полиморфизм во время выполнения. Диспетчеризуемая подпрограмма может быть вызвана со статическими тэговыми операндами, в таком случае тело вызываемой подпрограммы определяется во время компиляции. Дополнительно, диспетчеризуемая подпрограмма может быть вызвана используя способ диспетчеризованного (перенаправленного) вызова, в таком случае, тело вызываемой подпрограммы определяется во время выполнения.
       
28   Private extension   Приватное расширение   Приватное расширение подобно расширению записи. Отличительной особенностью является то, что компоненты такого расширения не видимы для клиентов.
       
29   Private type   Приватный тип   Приватный тип - это частичное представление типа, полное представление которого скрыто от клиентов.
       
30   Program unit   Программный модуль   Программный модуль это пакет, задачный модуль, защищенный модуль, защищенная точка входа, настраиваемый модуль или явно описанная подпрограмма отличная от перечислимого литерала. Определенные программные модули могут быть откомпилированы отдельно. Дополнительно, они могут быть физически размещены внутри других программных модулей.
       
31   Program   Программа   Программа - это множество разделов, каждый из которых может исполняться в отдельном адресном пространстве, возможно на разных компьютерах. Раздел состоит из набора библиотечных модулей.
       
32   Protected type   Защищенный тип   Защищенный тип - это составной тип, чьи компоненты защащены от одновременного доступа множества задач.
       
33   Real type   Вещественный тип   Вещественный тип имеет значения, которые являются приближенными значениями вещественных чисел. Типы с плавающей точкои и типы с фиксированной точкой являются вещественными типами.
       
34   Record extension   Расширение записи   Расширение записи - это тип, который расширяет другой тип путем добавления дополнительных компонентов.
       
35   Record type   Тип записи   Тип записи - это составной тип, состоящий из ни одного или более именованных компонентов, тип которых может быть разным.
       
36   Scalar type   Скалярный тип   Скалярный тип - это или дискретный тип, или вещественный тип.
       
37   Subtype   Подтип   Подтип - это тип с ограничением, которое ограничивает значения подтипа с целью удовлетворения некоторых условий. Значения подтипа являются подмножеством значений его типа.
       
38   Tagged type   Тэговый тип   Объекты тэгового типа характеризуются наличием тэга типа времени выполнения. Такой тэг однозначно определяет тип созданного объекта. Операнд надклассового тэгового типа может быть использован для формирования диспетчеризуемого (перенаправляемого) вызова. В таком случае, тэг индицирует тело подпрограммы которую необходимо вызвать. Допустимы также недиспетчеризуемые вызовы, в которых тело подпрограммы, которую необходимо вызвать, определяется во время компиляции. Тэговые типы могут быть расширены дополнительными компонентами.
       
39   Task type   Тип задачи
Задачный тип
  Тип задачи - это составной тип значениями которого являются задачи. Задачи являются активными сущностями, которые могут выполняться одновременно с другими задачами. Задачу раздела программы верхнего уровня называют задачей окружения.
       
40   Type   Тип   Каждый объект имеет тип. Тип обладает ассоциированным с ним множеством значений и множеством примитивных операций, которые реализуют фундаментальный аспект его семантики. Типы группируются в классы. Типы определенного класса используют общее множество примитивных операций. Классы объединяются в иерархию наследования. Таким образом, если тип принадлежит определенному классу, то все производные от него типы будут принадлежать этому же классу.
       
41   View   Представление   см. Definition

Copyright (C) А.Гавва V-0.4w май 2004



Литература


Ada 95 Language Reference Manual ANSI/ISO/IEC 8652:1995

http://www.adapower.com/rm95/index.html

Ada 95 Rationale, The Language and Standard Libraries

http://www.adapower.com/rationale/index.html

Ada 95 Quality and Style: Guidelines for Professional Programmers

http://www.informatik.uni-stuttgart.de/ifi/ps/ada-doc/style_guide/cover.html

GNAT Reference Manual

GNAT User Guide

Smith, Michael A., Object-Oriented Software in Ada 95

http://burks.bton.ac.uk/burks/language/ada/ada95.pdf

English, John, Ada 95 The Craft of Object-Oriented Programming

http://www.it.bton.ac.uk/staff/je/adacraft/

Feldman, M.B. and Koffman E.B., Ada 95 Problem Solving and Program Design

Richard Riehle, Ada Distilled

http://www.adapower.com/learn/adadistilled.pdf

Ken O. Burtch, The Big Online Book of Linux Ada programming

http://www.vaxxine.com/pegasoft/homes/book.html

Dale Stanbrough, Quick Ada

http://goanna.cs.rmit.edu.au/~dale/ada/aln.html

Copyright (C) А.Гавва V-0.4w май 2004



Пакет AdaDirect_IO


with Ada.IO_Exceptions;

generic

type Element_Type is private; -- параметр настройки модуля

package Ada.Direct_IO is

type File_Type is limited private;

type File_Mode is (In_File, Inout_File, Out_File);

type Count is range 0 .. System.Direct_IO.Count'Last;

subtype Positive_Count is Count range 1 .. Count'Last;

-- Подпрограммы управления файлами

procedure Create (File : in out File_Type; Mode : in File_Mode := Inout_File; Name : in String := ""; Form : in String := "");

procedure Open (File : in out File_Type; Mode : in File_Mode; Name : in String; Form : in String := "");

procedure Close (File : in out File_Type); procedure Delete (File : in out File_Type); procedure Reset (File : in out File_Type; Mode : in File_Mode); procedure Reset (File : in out File_Type);

function Mode (File : in File_Type) return File_Mode; function Name (File : in File_Type) return String; function Form (File : in File_Type) return String;

function Is_Open (File : in File_Type) return Boolean;

-- Подпрограммы ввода/вывода

procedure Read (File : in File_Type; Item : out Element_Type; From : in Positive_Count);

procedure Read (File : in File_Type; Item : out Element_Type);

procedure Write (File : in File_Type; Item : in Element_Type; To : in Positive_Count);

procedure Write (File : in File_Type; Item : in Element_Type);

procedure Set_Index (File : in File_Type; To : in Positive_Count);

function Index (File : in File_Type) return Positive_Count; function Size (File : in File_Type) return Count;

function End_Of_File (File : in File_Type) return Boolean;

-- Исключения

Status_Error : exception renames IO_Exceptions.Status_Error; Mode_Error : exception renames IO_Exceptions.Mode_Error; Name_Error : exception renames IO_Exceptions.Name_Error; Use_Error : exception renames IO_Exceptions.Use_Error; Device_Error : exception renames IO_Exceptions.Device_Error; End_Error : exception renames IO_Exceptions.End_Error; Data_Error : exception renames IO_Exceptions.Data_Error;

private

. . . -- стандартом языка не определено

end Ada.Direct_IO;



Пакет AdaSequential_IO


with Ada.IO_Exceptions;

generic

type Element_Type (<>) is private; -- параметр настройки модуля

package Ada.Sequential_IO is

type File_Type is limited private;

type File_Mode is (In_File, Out_File, Append_File);

-- Подпрограммы управления файлами

procedure Create (File : in out File_Type; Mode : in File_Mode := Out_File; Name : in String := ""; Form : in String := "");

procedure Open (File : in out File_Type; Mode : in File_Mode; Name : in String; Form : in String := "");

procedure Close (File : in out File_Type); procedure Delete (File : in out File_Type); procedure Reset (File : in out File_Type; Mode : in File_Mode); procedure Reset (File : in out File_Type);

function Mode (File : in File_Type) return File_Mode; function Name (File : in File_Type) return String; function Form (File : in File_Type) return String;

function Is_Open (File : in File_Type) return Boolean;

-- Подпрограммы ввода/вывода

procedure Read (File : in File_Type; Item : out Element_Type); procedure Write (File : in File_Type; Item : in Element_Type);

function End_Of_File (File : in File_Type) return Boolean;

-- Исключения

Status_Error : exception renames IO_Exceptions.Status_Error; Mode_Error : exception renames IO_Exceptions.Mode_Error; Name_Error : exception renames IO_Exceptions.Name_Error; Use_Error : exception renames IO_Exceptions.Use_Error; Device_Error : exception renames IO_Exceptions.Device_Error; End_Error : exception renames IO_Exceptions.End_Error; Data_Error : exception renames IO_Exceptions.Data_Error;

private

. . . -- стандартом языка не определено

end Ada.Sequential_IO;



Пакет AdaStreamsStream_IO


with Ada.IO_Exceptions;

package Ada.Streams.Stream_IO is

type Stream_Access is access all Root_Stream_Type'Class; type File_Type is limited private; type File_Mode is (In_File, Out_File, Append_File);

type Count is range 0 .. Определяется_Реализацией;

subtype Positive_Count is Count range 1 .. Count'Last; -- индекс в файле, -- в потоковых -- элементах

-- Подпрограммы управления файлами

procedure Create (File : in out File_Type; Mode : in File_Mode := Out_File; Name : in String := ""; Form : in String := "");

procedure Open (File : in out File_Type; Mode : in File_Mode; Name : in String; Form : in String := "");

procedure Close (File : in out File_Type); procedure Delete (File : in out File_Type); procedure Reset (File : in out File_Type; Mode : in File_Mode); procedure Reset (File : in out File_Type);

function Mode (File : in File_Type) return File_Mode; function Name (File : in File_Type) return String; function Form (File : in File_Type) return String;

function Is_Open (File : in File_Type) return Boolean; function End_Of_File (File : in File_Type) return Boolean;

function Stream (File : in File_Type) return Stream_Access;

-- Подпрограммы ввода/вывода

procedure Read (File : in File_Type; Item : out Stream_Element_Array; Last : out Stream_Element_Offset; From : in Positive_Count);

procedure Read (File : in File_Type; Item : out Stream_Element_Array; Last : out Stream_Element_Offset);

procedure Write (File : in File_Type; Item : in Stream_Element_Array; To : in Positive_Count);

procedure Write (File : in File_Type; Item : in Stream_Element_Array);

-- Подпрограммы управления позиционированием внутри файла

procedure Set_Index (File : in File_Type; To : in Positive_Count);

function Index (File : in File_Type) return Positive_Count; function Size (File : in File_Type) return Count;

procedure Set_Mode (File : in out File_Type; Mode : in File_Mode);

procedure Flush (File : in out File_Type);

-- Исключения

Status_Error : exception renames IO_Exceptions.Status_Error; Mode_Error : exception renames IO_Exceptions.Mode_Error; Name_Error : exception renames IO_Exceptions.Name_Error; Use_Error : exception renames IO_Exceptions.Use_Error; Device_Error : exception renames IO_Exceptions.Device_Error; End_Error : exception renames IO_Exceptions.End_Error; Data_Error : exception renames IO_Exceptions.Data_Error;

private

. . . -- стандартом языка не определено

end Ada.Streams.Stream_IO;

Copyright (C) А.Гавва V-0.4w май 2004



Пакет AdaText_IO


with Ada.IO_Exceptions; -- описано в приложении A (Annex A) -- руководства по языку (RM-95)

package Ada.Text_IO is

pragma Elaborate_Body (Text_IO);

type File_Type is limited private; -- внутреннее представление -- файла для программы

type File_Mode is (In_File, Out_File, Append_File); -- управляет направлением -- передачи данных -- (в/из файла)

type Count is range 0 .. Определяется_Реализацией; subtype Positive_Count is Count range 1 .. Count'Last;

Unbounded : constant Count := 0; -- длина строки и страницы

subtype Field is Integer range 0 .. Определяется_Реализацией;

subtype Number_Base is Integer range 2 .. 16; -- используются только: -- 2, 8, 10 и 16

type Type_Set is (Lower_Case, Upper_Case); -- для перечислимых типов

-- Подпрограммы управления файлами

procedure Create (File : in out File_Type; -- ассоциируемая с внешним файлом -- переменная в программе Mode : in File_Mode := Out_File; -- по умолчанию - файл для вывода данных Name : in String := ""; -- имя внешнего файла Form : in String := ""); -- использование, не определено стандартом

procedure Open (File : in out File_Type; Mode : in File_Mode; Name : in String; Form : in String := "");

procedure Close (File : in out File_Type); procedure Delete (File : in out File_Type); procedure Reset (File : in out File_Type; Mode : in File_Mode); -- меняет режим -- доступа -- к файлу procedure Reset (File : in out File_Type);

function Mode (File : in File_Type) return File_Mode; -- режим доступа к файлу function Name (File : in File_Type) return String; -- имя внешнего файла function Form (File : in File_Type) return String; -- зависит от реализации

function Is_Open (File : in File_Type) return Boolean;

-- Подпрограммы управления файлами ввода, вывода и вывода ошибок -- устанавливаемыми по умолчанию

procedure Set_Input (File : in File_Type); -- установить как файл ввода procedure Set_Output (File : in File_Type); -- установить как файл вывода procedure Set_Error (File : in File_Type); -- установить как файл вывода ошибок -- ПРИМЕЧАНИЕ: перед вызовом подпрограмм Set_Input, -- Set_Output и/или Set_Error, -- файл File должен быть открыт

function Standard_Input return File_Type; -- обычно, клавиатура function Standard_Output return File_Type; -- обычно, видеодисплей function Standard_Error return File_Type;

function Current_Input return File_Type; -- обычно, то же что и Standard_Input function Current_Output return File_Type; function Current_Error return File_Type;

type File_Access is access constant File_Type; -- ссылочный тип (указатель) -- позволяющий ссылаться -- на переменные внутреннего -- представления файла, что -- во многих случаях удобно -- (введен стандартом Ada-95)

function Standard_Input return File_Access; function Standard_Output return File_Access; function Standard_Error return File_Access;

function Current_Input return File_Access; function Current_Output return File_Access; function Current_Error return File_Access;

-- Подпрограммы управления буферами

procedure Flush (File : in out File_Type); procedure Flush;

-- Подпрограммы спецификации длин строк и страниц для ввода/вывода

procedure Set_Line_Length (File : in File_Type; To : in Count); procedure Set_Line_Length (To : in Count);

procedure Set_Page_Length (File : in File_Type; To : in Count); procedure Set_Page_Length (To : in Count);

function Line_Length (File : in File_Type) return Count; function Line_Length return Count;

function Page_Length (File : in File_Type) return Count; function Page_Length return Count;

-- Подпрограммы спецификации Column, Line и Page (колонка, строка и страница)

procedure New_Line (File : in File_Type; -- вывод терминатора строки Spacing : in Positive_Count := 1); -- по умолчанию, один раз procedure New_Line (Spacing : in Positive_Count := 1);

procedure Skip_Line (File : in File_Type; -- отбросить ввод символов Spacing : in Positive_Count := 1); -- по умолчанию, для одной procedure Skip_Line (Spacing : in Positive_Count := 1);-- строки

function End_Of_Line (File : in File_Type) return Boolean; function End_Of_Line return Boolean;

procedure New_Page (File : in File_Type); -- завершить текущую страницу procedure New_Page; -- выводом терминатора страницы

procedure Skip_Page (File : in File_Type); -- отбросить ввод символов procedure Skip_Page; -- вплоть до терминатора страницы

function End_Of_Page (File : in File_Type) return Boolean; function End_Of_Page return Boolean;

function End_Of_File (File : in File_Type) return Boolean; function End_Of_File return Boolean;

procedure Set_Col (File : in File_Type; To : in Positive_Count); procedure Set_Col (To : in Positive_Count);

procedure Set_Line (File : in File_Type; To : in Positive_Count); procedure Set_Line (To : in Positive_Count);

function Col (File : in File_Type) return Positive_Count; function Col return Positive_Count;

function Line (File : in File_Type) return Positive_Count; function Line return Positive_Count;

function Page (File : in File_Type) return Positive_Count; function Page return Positive_Count;

-- Посимвольный ввод/вывод

procedure Get (File : in File_Type; Item : out Character); procedure Get (Item : out Character); procedure Put (File : in File_Type; Item : in Character); procedure Put (Item : in Character);

procedure Look_Ahead (File : in File_Type; Item : out Character; End_Of_Line : out Boolean);

procedure Look_Ahead (Item : out Character; End_Of_Line : out Boolean);

procedure Get_Immediate (File : in File_Type; Item : out Character);

procedure Get_Immediate (Item : out Character);

procedure Get_Immediate (File : in File_Type; Item : out Character; Available : out Boolean);

procedure Get_Immediate (Item : out Character; Available : out Boolean);

-- Построчный ввод/вывод

procedure Get (File : in File_Type; Item : out String); procedure Get (Item : out String); procedure Put (File : in File_Type; Item : in String); procedure Put (Item : int String);

procedure Get_Line (File : in File_Type; Item : out String; Last : out Natural);

procedure Get_Line (Item : out String; Last : out Natural);

procedure Put_Line (File : in File_Type; Item : in String);

procedure Put_Line (Item : in String);

-- Исключения

Status_Error : exception renames IO_Exceptions.Status_Error; Mode_Error : exception renames IO_Exceptions.Mode_Error; Name_Error : exception renames IO_Exceptions.Name_Error; Use_Error : exception renames IO_Exceptions.Use_Error; Device_Error : exception renames IO_Exceptions.Device_Error; End_Error : exception renames IO_Exceptions.End_Error; Data_Error : exception renames IO_Exceptions.Data_Error; Layout_Error : exception renames IO_Exceptions.Layout_Error;

private

. . . -- стандартом языка не определено

end Ada.Text_IO;



Пакет AdaText_IODecimal_IO


generic

type Num is delta <> digits <>; -- параметр настройки модуля

package Ada.Text_IO.Decimal_IO is -- децимальные типы, как правило, используются -- в финансовых приложениях

Default_Fore : Field := Num'Fore; -- количество символов слева -- от десятичной точки Default_Aft : Field := Num'Aft; -- количество символов справа -- от десятичной точки Default_Exp : Field := 0; -- для нотации используемой -- в научных рассчетах

procedure Get -- ввод числа из указанного файла (File : in File_Type; Item : out Num; Width : in Field := 0);

procedure Get -- ввод числа из файла стандартного ввода (Item : out Num; Width : in Field := 0);

procedure Put -- вывод числа в указанный файл (File : in File_Type; Item : in Num; Fore : in Field := Default_Fore; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);

procedure Put -- вывод числа в файл стандартного вывода (Item : in Num; Fore : in Field := Default_Fore; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);

procedure Get -- ввод числа из строки -- (преобразование из строкового представления) (From : in String; Item : out Num; Last : out Positive);

procedure Put -- вывод числа в строку -- (преобразование в строковое представление) (To : out String; Item : in Num; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);

end Ada.Text_IO.Decimal_IO;



Пакет AdaText_IOEnumeration_IO


generic

type Enum is (<>); -- параметр настройки модуля

package Ada.Text_IO.Enumeration_IO is

Default_Width : Field := 0; Default_Setting : Type_Set := Upper_Case;

procedure Get -- ввод значения перечислимого типа из указанного файла (File : in File_Type; Item : out Enum);

procedure Get -- ввод значения перечислимого типа из файла стандартного ввода (Item : out Enum);

procedure Put -- вывод значения перечислимого типа в указанный файл (File : in File_Type; Item : in Enum; Width : in Field := Default_Width; Set : in Type_Set := Default_Setting);

procedure Put -- вывод значения перечислимого типа в файл стандартного вывода (Item : in Enum; Width : in Field := Default_Width; Set : in Type_Set := Default_Setting);

procedure Get -- ввод значения перечислимого типа из строки -- (преобразование из строкового представления) (From : in String; Item : out Enum; Last : out Positive);

procedure Put -- вывод значения перечислимого типа в строку -- (преобразование в строковое представление) (To : out String; Item : in Enum; Set : in Type_Set := Default_Setting);

end Ada.Text_IO.Enumeration_IO;



Пакет AdaText_IOFixed_IO


generic

type Num is delta <>; -- параметр настройки модуля

package Ada.Text_IO.Fixed_IO is

Default_Fore : Field := Num'Fore; -- количество символов слева -- от десятичной точки Default_Aft : Field := Num'Aft; -- количество символов справа -- от десятичной точки Default_Exp : Field := 0; -- для нотации используемой -- в научных рассчетах

procedure Get -- ввод числа из указанного файла (File : in File_Type; Item : out Num; Width : in Field := 0);

procedure Get -- ввод числа из файла стандартного ввода (Item : out Num; Width : in Field := 0);

procedure Put -- вывод числа в указанный файл (File : in File_Type; Item : in Num; Fore : in Field := Default_Fore; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);

procedure Put -- вывод числа в файл стандартного вывода (Item : in Num; Fore : in Field := Default_Fore; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);

procedure Get -- ввод числа из строки -- (преобразование из строкового представления) (From : in String; Item : out Num; Last : out Positive);

procedure Put -- вывод числа в строку -- (преобразование в строковое представление) (To : out String; Item : in Num; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);

end Ada.Text_IO.Fixed_IO;



Пакет AdaText_IOFloat_IO


generic

type Num is digits <>; -- параметр настройки модуля

package Ada.Text_IO.Float_IO is

Default_Fore : Field := 2; -- количество символов слева -- от десятичной точки Default_Aft : Field := Num'Digits - 1; -- количество символов справа -- от десятичной точки Default_Exp : Field := 3; -- для нотации используемой -- в научных рассчетах

procedure Get -- ввод числа из указанного файла (File : in File_Type; Item : out Num; Width : in Field := 0);

procedure Get -- ввод числа из файла стандартного ввода (Item : out Num; Width : in Field := 0);

procedure Put -- вывод числа в указанный файл (File : in File_Type; Item : in Num; Fore : in Field := Default_Fore; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);

procedure Put -- вывод числа в файл стандартного вывода (Item : in Num; Fore : in Field := Default_Fore; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);

procedure Get -- ввод числа из строки -- (преобразование из строкового представления) (From : in String; Item : out Num; Last : out Positive);

procedure Put -- вывод числа в строку -- (преобразование в строковое представление) (To : out String; Item : in Num; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);

end Ada.Text_IO.Float_IO;



Пакет AdaText_IOInteger_IO


generic

type Num is range <>; -- параметр настройки модуля

package Ada.Text_IO.Integer_IO is

Default_Width : Field := Num'Width; -- ширина числа в символах Default_Base : Number_Base := 10; -- устанавливает основание системы счисления -- принимаемое по умолчанию для всех -- операций ввода/вывода

procedure Get -- ввод числа из указанного файла (File : in File_Type; Item : out Num; -- тип соответствует формальному параметру настройки Width : in Field := 0); -- может быть использовано для точного указания -- количества вводимых символов

procedure Get -- ввод числа из файла стандартного ввода (Item : out Num; Width : in Field := 0);

procedure Put -- вывод числа в указанный файл (File : in File_Type; Item : in Num; Width : in Field := Default_Width; Base : in Number_Base := Default_Base);

procedure Put -- вывод числа в файл стандартного вывода (Item : in Num; Width : in Field := Default_Width; Base : in Number_Base := Default_Base);

procedure Get -- ввод числа из строки -- (преобразование из строкового представления) (From : in String; Item : out Num; Last : out Positive); -- индекс последнего преобразуемого символа в From

procedure Put -- вывод числа в строку -- (преобразование в строковое представление) (To : out String; Item : in Num; Base : in Number_Base := Default_Base);

end Ada.Text_IO.Integer_IO;



Пакет AdaText_IOModular_IO


generic

type Num is mod <>; -- параметр настройки модуля

package Ada.Text_IO.Modular_IO is

Default_Width : Field := Num'Width; -- ширина числа в символах Default_Base : Number_Base := 10; -- устанавливает основание системы счисления -- принимаемое по умолчанию для всех -- операций ввода/вывода

procedure Get -- ввод числа из указанного файла (File : in File_Type; Item : out Num; Width : in Field := 0);

procedure Get -- ввод числа из файла стандартного ввода (Item : out Num; Width : in Field := 0);

procedure Put -- вывод числа в указанный файл (File : in File_Type; Item : in Num; Width : in Field := Default_Width; Base : in Number_Base := Default_Base);

procedure Put -- вывод числа в файл стандартного вывода (Item : in Num; Width : in Field := Default_Width; Base : in Number_Base := Default_Base);

procedure Get -- ввод числа из строки -- (преобразование из строкового представления) (From : in String; Item : out Num; Last : out Positive);

procedure Put -- вывод числа в строку -- (преобразование в строковое представление) (To : out String; Item : in Num; Base : in Number_Base := Default_Base);

end Ada.Text_IO.Modular_IO;



Спецификация пакета Standard


Пакет Standard всегда находится в области видимости, поэтому все описания этого пакета всегда непосредственно доступны.

package Standard is

pragma Pure(Standard);

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 range Определяется_Реализацией;

subtype Natural is Integer range 0 .. Integer'Last; subtype Positive is Integer range 1 .. Integer'Last;

-- предопределенные знаки операций для этого типа следующие: -- 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;

type Float is digits Определяется_Реализацией;

-- предопределенные знаки операций для этого типа следующие: -- 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_Integer и Root_Real -- -- 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;

-- Описание символьного типа Character основано -- на множестве символов описанных стандартом ISO 8859-1. -- -- Символьные литералы которые соответствуют -- позициям управляющих символов отсутствуют. -- Они описываются идентификаторами -- которые записаны в нижнем регистре.

type Character is

(nul, soh, stx, etx, eot, enq, ack, bel, -- 0 (16#00#) .. (16#07#) bs, ht, lf, vt, ff, cr, so, si, -- 8 (16#08#) .. (16#0F#)

dle, dc1, dc2, dc3, dc4, nak, syn, etb, -- 16 (16#10#) .. (16#17#) can, em, sub, esc, fs, gs, rs, us, -- 24 (16#18#) .. (16#1F#)

' ', '!', '"', '#', '$', '%', '&', ''', -- 32 (16#20#) .. (16#27#) '(', ')', '*', '+', ',', '-', '.', '/', -- 40 (16#28#) .. (16#2F#)

'0', '1', '2', '3', '4', '5', '6', '7', -- 48 (16#30#) .. (16#37#) '8', '9', ':', ';', '<', '=', '>', '?', -- 56 (16#38#) .. (16#3F#)

'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', -- 64 (16#40#) .. (16#47#) 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', -- 72 (16#48#) .. (16#4F#)

'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', -- 80 (16#50#) .. (16#57#) 'X', 'Y', 'Z', '[', '\', ']', '^', '_', -- 88 (16#58#) .. (16#5F#)

'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', -- 96 (16#60#) .. (16#67#) 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', -- 104 (16#68#) .. (16#6F#)

'p', 'q', 'r', 's', 't', 'u', 'v', 'w', -- 112 (16#70#) .. (16#77#) 'x', 'y', 'z', '{', '|', '}', '~', del, -- 120 (16#78#) .. (16#7F#)

reserved_128, reserved_129, bph, nbh, -- 128 (16#80#) .. (16#83#) reserved_132, nel, ssa, esa, -- 132 (16#84#) .. (16#87#)

hts, htj, vts, pld, plu, ri, ss2, ss3, -- 136 (16#88#) .. (16#8F#)

dcs, pu1, pu2, sts, cch, mw, spa, epa, -- 144 (16#90#) .. (16#97#)

sos, reserved_153, sci, csi, -- 152 (16#98#) .. (16#9B#) st, osc, pm, apc, -- 156 (16#9C#) .. (16#9F#)

... );

-- Описание символьного типа Wide_Character основано -- на множестве символов описанных стандартом ISO 10646 BMP. -- -- Первые 256 символьных позиций соответствуют содержимому -- символьного типа Character

type Wide_Character is (nul, soh ... FFFE, FFFF);

-- Пакет ASCII считается устаревшим

package ASCII is

-- Управляющие символы:

NUL : constant Character := Character'Val (16#00#); SOH : constant Character := Character'Val (16#01#); STX : constant Character := Character'Val (16#02#); ETX : constant Character := Character'Val (16#03#); EOT : constant Character := Character'Val (16#04#); ENQ : constant Character := Character'Val (16#05#); ACK : constant Character := Character'Val (16#06#); BEL : constant Character := Character'Val (16#07#); BS : constant Character := Character'Val (16#08#); HT : constant Character := Character'Val (16#09#); LF : constant Character := Character'Val (16#0A#); VT : constant Character := Character'Val (16#0B#); FF : constant Character := Character'Val (16#0C#); CR : constant Character := Character'Val (16#0D#); SO : constant Character := Character'Val (16#0E#); SI : constant Character := Character'Val (16#0F#); DLE : constant Character := Character'Val (16#10#); DC1 : constant Character := Character'Val (16#11#); DC2 : constant Character := Character'Val (16#12#); DC3 : constant Character := Character'Val (16#13#); DC4 : constant Character := Character'Val (16#14#); NAK : constant Character := Character'Val (16#15#); SYN : constant Character := Character'Val (16#16#); ETB : constant Character := Character'Val (16#17#); CAN : constant Character := Character'Val (16#18#); EM : constant Character := Character'Val (16#19#); SUB : constant Character := Character'Val (16#1A#); ESC : constant Character := Character'Val (16#1B#); FS : constant Character := Character'Val (16#1C#); GS : constant Character := Character'Val (16#1D#); RS : constant Character := Character'Val (16#1E#); US : constant Character := Character'Val (16#1F#); DEL : constant Character := Character'Val (16#7F#);

-- Остальные символы:

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_B : constant Character := 'b'; LC_C : constant Character := 'c'; LC_D : constant Character := 'd'; LC_E : constant Character := 'e'; LC_F : constant Character := 'f'; LC_G : constant Character := 'g'; LC_H : constant Character := 'h'; LC_I : constant Character := 'i'; LC_J : constant Character := 'j'; LC_K : constant Character := 'k'; LC_L : constant Character := 'l'; LC_M : constant Character := 'm'; LC_N : constant Character := 'n'; LC_O : constant Character := 'o'; LC_P : constant Character := 'p'; LC_Q : constant Character := 'q'; LC_R : constant Character := 'r'; LC_S : constant Character := 's'; LC_T : constant Character := 't'; LC_U : constant Character := 'u'; LC_V : constant Character := 'v'; LC_W : constant Character := 'w'; LC_X : constant Character := 'x'; LC_Y : constant Character := 'y'; LC_Z : constant Character := 'z';

end ASCII;

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

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 Wide_String is array (Positive range <>) of Wide_Character; pragma Pack (Wide_String);

-- для типа Wide_String предопределены такие же знаки операций -- что и для типа String

type Duration is delta Определяется_Реализацией

range Определяется_Реализацией;

-- для типа Duration предопределены такие же знаки операций -- что и для любого вещественного типа с фиксированной точкой.

-- Предопределенные исключения:

Constraint_Error : exception; Program_Error : exception; Storage_Error : exception; Tasking_Error : exception;

end Standard;

Copyright (C) А.Гавва V-0.4w май 2004



Спецификация пакета System


package System is

pragma Pure (System);

type Name is Определяемый_Реализацией_Перечислимый_Тип; System_Name : constant Name := Определяется_Реализацией;

-- Системно-зависимые именованные числа

Min_Int : constant := Root_Integer'First; Max_Int : constant := Root_Integer'Last;

Max_Binary_Modulus : constant := Определяется_Реализацией; Max_Nonbinary_Modulus : constant := Определяется_Реализацией;

Max_Base_Digits : constant := Root_Real'Digits; Max_Digits : constant := Определяется_Реализацией;

Max_Mantissa : constant := Определяется_Реализацией; Fine_Delta : constant := Определяется_Реализацией;

Tick : constant := Определяется_Реализацией;

-- Описания относящиеся к хранению информации в памяти

type Address is Определяется_Реализацией; -- обычно, приватный тип Null_Address : constant Address;

Storage_Unit : constant := Определяется_Реализацией; Word_Size : constant := Определяется_Реализацией * Storage_Unit; Memory_Size : constant := Определяется_Реализацией;

-- Сравнение адресов

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;

-- Другие системно-зависимые описания

type Bit_Order is (High_Order_First, Low_Order_First); Default_Bit_Order : constant Bit_Order;

-- Описания относящиеся к приоритетам (RM D.1)

subtype Any_Priority is Integer range Определяется_Реализацией;

subtype Priority is Any_Priority range Any_Priority'First..Определяется_Реализацией;

subtype Interrupt_Priority is Any_Priority range Priority'Last + 1 .. Any_Priority'Last;

Default_Priority : constant Priority := (Priority'First + Priority'Last) / 2;

private

-- Стандартом языка не определено

end System;

Copyright (C) А.Гавва V-0.4w май 2004



Стандартно определенные атрибуты типов


Список стандартно определенных атрибутов типов Ады приводится в приложении K (Annex K) руководства по языку программирования Ада (RM-95).

P'Access где P - любая подпрограмма.

Возвращает значение ссылочного типа, которое указывает на подпрограмму P.

   
X'Access  -  где X: любой объект с косвенным доступом.

Возвращает значение ссылочного типа, которое указывает на X.

   
X'Address  -  где X: любой объект или программный модуль.

Возвращает адрес первого распределенного для хранения X элемента памяти как значение типа System.Address.

   
S'Adjacent  -  где S: любой вещественный тип с плавающей точкой.

Функция которая возвращает смежное по отношению к первому параметру машинное число, в указанном вторым параметром направлении.

   
S'Aft  -  где S: любой вещественный тип с фиксированной точкой.

Возвращает значение типа Universal_Integer, которое показывает требуемое число десятичных цифр после десятичной точки для обеспечения величины delta

при представлении S.

   
X'Alignment  -  где X: любой тип или объект.

Возвращает значение типа Universal_Integer, указывающее выравнивание X в памяти.

   
S'Base  -  где S: любой скалярный тип.

Возвращает неограниченный базовый тип для S.

   
S'Bit_Order  -  где S: любой тип записи.

Возвращает битовый порядок для S как значение типа System.Bit_Order.

   
P'Body_Version  -  где P: любой программный модуль.

Возвращает строку которая идентифицирует версию тела компилируемого модуля P.

   
T'Callable  -  где T: любая задача.

Возвращает значение True, если T может быть вызвана.

   
E'Caller  -  где E: имя любой точки входа.

Возвращает значение типа Task_ID, которое идентифицирует обрабатываемую в текущий момент задачу, обратившуюся к точке входа задачи E.

Использование этого атрибута допустимо только внутри инструкции принятия (для задачи-сервера) или внутри тела входа (для защищенного модуля).

   
S'Ceiling  -  где S: любой вещественный тип с плавающей точкой.

Функция возвращающая наименьшее целочисленное значение, которое больше или равно ее параметру.

   
S'Class  -  где S: любой тэговый тип.

Возвращает надклассовый тип для класса корнем иерархии которого будет тип S.

   
X'Component_Size  -  где X: любой объект или тип массива.

Возвращает значение типа Universal_Integer

которое представляет битовый размер компонентов X.

   
S'Compose  -  где S: любой вещественный тип с плавающей точкой.

Функция которая возвращает значение вещественного типа с плавающей точкой, комбинируя дробную часть, которая представлена первым параметром, и порядок, который представлен вторым параметром.

   
A'Constrained  -  где A: любой тип с дискриминантом.

Возвращает True когда A является ограниченным.

   
S'Copy_Sign  -  где S: любой вещественный тип с плавающей точкой.

Функция которая возвращает значение величина которого определяется первым параметром, а знак - вторым параметром.

   
E'Count  -  где E: имя любой точки входа.

Возвращает значение типа Universal_Integer, показывающее число обращений к точке входа E

которые находятся в очереди.

   
S'Definite  -  где S: любой формально неопределенный тип.

Возвращает True если фактический тип S определен.

   
S'Delta  -  где S: любой вещественный тип с плавающей точкой.

Возвращает значение типа Universal_Real, показывающее величину значения delta для S

   
S'Denorm  -  где S: любой вещественный тип с плавающей точкой.

Возвращает True если ненормализованные значения S

являются машинными числами.

   
S'Digits  -  где S: любой тип decimal или вещественный тип с плавающей точкой.

Возвращает значение типа Universal_Integer, показывающее число цифр для S.

   
S'Exponent  -  где S: любой вещественный тип с плавающей точкой.

Функция возвращающая значение типа Universal_Integer, которое представляет нормализованный порядок ее параметра.

   
S'External_Tag  -  где S: любой тэговый тип.

Возвращает представление S'Tag как значение типа String.

   
A'First(N)  -  где A: любой массив.

Возвращает нижнюю границу диапазона N-го индекса массива A.

   
A'First  -  где A: любой массив.

Возвращает нижнюю границу диапазона первого индекса массива A.

   
S'First  -  где S: любой скалярный тип.

Возвращает нижнюю границу диапазона значений типа S.

   
R.C'First_Bit  -  где R.C: любой компонент C записи типа R.

Возвращает значение типа Universal_Integer, которое представляет число битов до первого бита C внутри записи типа R.

   
S'Floor  -  где S: любой вещественный тип с плавающей точкой.

Функция возвращающая наибольшее целочисленное значение, которое больше или равно ее параметру.

   
S'Fore  -  где S: любой вещественный тип с плавающей точкой.

Возвращает значение типа Universal_Integer

которое показывает минимально необходимое для представления значения S

число символов до десятичной точки.

   
S'Fraction  -  где S: любой вещественный тип с плавающей точкой.

Функция которая возвращает дробную часть ее параметра.

   
E'Identity  -  где E: любое исключение.

Возвращает значение типа Exception_ID которое уникально идентифицирует E.

   
T'Identity  -  где T: любая задача.

Возвращает значение типа Task_ID которое уникально идентифицирует T.

   
S'Image  -  где S: любой скалярный тип.

Функция которая возвращает представление ее параметра как значение типа String.

   
S'Input  -  где S: любой тип.

Функция которая читает и возвращает значение типа S

из потока, который указывается ее параметром.

   
S'Class'Input  -  где S'Class: любой надклассовый тип.

Функция которая читает из указанного как параметр потока тэг, затем, выполняет диспетчеризацию (перенаправление) вызова к подпрограмме указываемой атрибутом 'Input

для типа, который идентифицируется значением прочитанного тэга, после чего, возвращает значение этого типа.

   
A'Last(N)  -  где A: любой массив.

Возвращает верхнюю границу диапазона N-го индекса массива A.

   
A'Last  -  где A: любой массив.

Возвращает верхнюю границу диапазона первого индекса массива A.

   
S'Last  -  где S: любой скалярный тип.

Возвращает верхнюю границу диапазона значений типа S.

   
R.C'Last_Bit  -  где R.C: любой компонент C записи типа R.

Возвращает значение типа Universal_Integer, которое представляет число битов до последнего бита C внутри записи типа R.

   
S'Leading_Part  -  где S: любой вещественный тип с плавающей точкой.

Функция которая возвращает главную часть ее первого параметра как число системы исчисления указанной как второй параметр.

   
A'Length(N)  -  где A: любой массив.

Возвращает длину N-го измерения массива A

как значение типа Universal_Integer.

   
A'Length  -  где A: любой массив.

Возвращает длину первого измерения массива A

как значение типа Universal_Integer.

   
S'Machine  -  где S: любой вещественный тип с плавающей точкой.

Функция которая возвращает ближайшее к ее параметру машинно-представляемое число.

   
S'Machine_Emax  -  где S: любой вещественный тип с плавающей точкой.

Возвращает наибольший порядок для S как значение типа Universal_Integer.

   
S'Machine_Emin  -  где S: любой вещественный тип с плавающей точкой.

Возвращает наименьший порядок для S как значение типа Universal_Integer.

   
S'Machine_Mantissa  -  где S: любой вещественный тип с плавающей точкой.

Возвращает для машинного представления S число цифр в мантиссе как значение типа Universal_Integer.

   
S'Machine_Overflows  -  где S: любой вещественный тип.

Возвращает True если было обнаружено переполнение или деление на ноль и возбуждено исключение Constraint_Error

для каждой предопределенной операции возвращающей результат типа S.

   
S'Machine_Radix  -  где S: любой вещественный тип.

Возвращает основание системы счисления для машинного представления S

как значение типа Universal_Integer.

   
S'Machine_Rounds  -  где S: любой вещественный тип.

Возвращает True если было выполнено округление неточного результата для каждой предопределенной операции возвращающей результат типа S.

   
S'Max  -  где S: любой скалярный тип.

Функция которая возвращает большее значение из двух переданных ей параметров.

   
S'Max_Size_In_Storage_Elements  -  где S: любой тип.

Возвращает значение типа Universal_Integer показывающее максимальное число элементов памяти занимаемых значением типа S, которое требуется при обращении к подпрограмме System.Storage_Pools.Allocate

как параметр Size_In_Storage_Elements

для получения значения ссылающегося на S типа.

   
S'Min  -  где S: любой скалярный тип.

Функция которая возвращает меньшее значение из двух переданных ей параметров.

   
S'Model  -  где S: любой вещественный тип с плавающей точкой.

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

   
S'Model_Emin  -  где S: любой вещественный тип с плавающей точкой.

Возвращает образец числа соответствующий S'Model_Emin.

   
S'Model_Epsilon  -  где S: любой вещественный тип с плавающей точкой.

Возвращает абсолютную разницу между 1.0

и следующим наибольшим образцом числа S

как значение типа Universal_Real.

   
S'Model_Mantissa  -  где S: любой вещественный тип с плавающей точкой.

Возвращает образец числа соответствующий S'Machine_Mantissa.

   
S'Model_Small  -  где S: любой вещественный тип с плавающей точкой.

Возвращает наименьший положительный образец числа S

как значение типа Universal_Real.

   
S'Modulus  -  где S: любой модульный тип.

Возвращает основание системы счисления S

как значение типа Universal_Integer.

   
S'Output  -  где S: любой тип.

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

   
S'Class'Output  -  где S'Class: любой надклассовый тип.

Процедура записывающая тэг ее второго параметра в поток, который указан как первый параметр, затем, выполняет диспетчеризацию (перенаправление) вызова к подпрограмме указываемой атрибутом 'Output

для типа, который идентифицируется значением тэга ее второго параметра.

   
D'Partition_ID  -  где D: любое описание уровня библиотеки.

Возвращает значение типа Universal_Integer

которое идентифицирует раздел (partition) распределенной программы в которой выполнена элаборация D.

   
S'Pos  -  где S: любой дискретный тип.

Функция которая возвращает номер позиции ее параметра как значение типа Universal_Integer.

   
R.C'Position  -  где R.C: любой компонент C записи типа R.

То же самое, что и R.C'Address - R'Address.

   
S'Pred  -  где S: любой дискретный тип.

Функция возвращающая значение у которого величина номера позиции на единицу меньше чем номер позиции ее параметра.

   
A'Range(N)  -  где A: любой тип массива.

Эквивалентно A'First(N) .. A'Last(N), кроме случая когда вычисление A было выполнено один раз.

   
A'Range  -  где A: любой тип массива.

Эквивалентно A'First .. A'Last, кроме случая когда вычисление A было выполнено один раз.

   
S'Range  -  где S: любой скалярный тип.

Эквивалентно S'First .. S'Last.

   
S'Read  -  где S: любой тип.

Процедура читающая ее второй параметр из потока, который указан ее первым параметром.

   
S'Class'Read  -  где S'Class: любой надклассовый тип.

Процедура выполняющая диспетчеризацию (перенаправление) вызова к подпрограмме указываемой атрибутом Read для типа, который идентифицируется значением тэга ее второго параметра.

   
S'Remainder  -  где S: любой вещественный тип с плавающей точкой.

Функция которая возвращает остаток от деления ее первого параметра на ее второй параметр.

   
S'Round  -  где S: любой вещественный тип с плавающей точкой.

Функция которая возвращает округленное значение ее параметра.

   
S'Rounding  -  где S: любой вещественный тип с плавающей точкой.

Функция которая возвращает ближайшее к ее параметру целое значение.

   
S'Safe_First  -  где S: любой вещественный тип с плавающей точкой.

Возвращает нижнюю границу сохранного диапазона S

как значение типа Universal_Real.

   
S'Safe_Last  -  где S: любой вещественный тип с плавающей точкой.

Возвращает верхнюю границу сохранного диапазона S

как значение типа Universal_Real.

   
S'Scale  -  где S: любой вещественный тип с плавающей точкой.

Возвращает для значения S позицию точки относительно крайней правой значащей цифры как значение типа Universal_Integer.

   
S'Scaling  -  где S: любой вещественный тип с плавающей точкой.

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

   
S'Signed_Zeros  -  где S: любой вещественный тип с плавающей точкой.

Возвращает True если аппаратное представление для S

обладает возможностью представления и положительного, и отрицательного нуля.

   
X'Size  -  где X: любой тип или объект.

Возвращает размер X в битах как значение типа Universal_Integer.

   
S'Small  -  где S: любой вещественный тип с плавающей точкой.

Возвращает наименьшее используемое внутри типа значение для представления S

как значение типа Universal_Real.

   
S'Storage_Pool  -  где S: любой ссылочный тип.

Возвращает пул пространства памяти который используется для S

как значение типа Root_Storage_Pool'Class.

   
S'Storage_Size  -  где S: любой ссылочный тип.

Возвращает результат вызова Storage_Size(S'Storage_Pool).

   
T'Storage_Size  -  где T: любая задача.

Возвращает число элементов памяти зарезервированных для T

как значение типа Universal_Integer.

   
S'Succ  -  где S: любой скалярный тип.

Функция возвращающая значение у которого величина номера позиции на единицу больше чем номер позиции ее параметра.

   
X'Tag  -  где X: любой тэговый тип или объект надклассового типа.

Возвращает тэг X как значение типа Ada.Tags.Tag.

   
T'Terminated  -  где T: любая задача.

Возвращает True если выполнение T завершено.

   
S'Truncation  -  где S: любой вещественный тип с плавающей точкой.

Функция которая округляет ее параметр в направлении нуля.

   
S'Unbiased_Rounding  -  где S: любой вещественный тип с плавающей точкой.

Функция которая возвращает ближайшее к ее параметру целочисленное значение, выполняя округление в направлении четного целого если значение параметра располагается точно между двумя целыми.

   
X'Unchecked_Access  -  где X: любой объект с косвенным доступом.

Возвращает то же самое значение, что и X'Access, однако при этом не осуществляется проверка правильности обращения.

   
S'Val  -  где S: любой дискретный тип.

Функция возвращающая значение типа S номера позиции которого равен величине ее параметра.

   
X'Valid  -  где X: любой скалярный объект.

Возвращает True если X - это нормальный стандартный объект имеющий допустимое представление.

   
S'Value  -  где S: любой скалярный тип.

Функция возвращающая значение типа S представление которого задано в виде значения типа String, игнорируя ведущие и завершающие пробелы.

   
P'Version  -  где P: любой программный модуль.

Возвращает строку (значение типа String) идентифицирующую версию компилируемого модуля который содержит описание P.

   
S'Wide_Image  -  где S: любой скалярный тип.

Функция которая возвращает представление ее параметра как значение типа Wide_String.

   
S'Wide_Value  -  где S: любой скалярный тип.

Функция возвращающая значение типа S представление которого задано в виде значения типа Wide_String, игнорируя ведущие и завершающие пробелы.

   
S'Wide_Width  -  где S: любой скалярный тип.

Возвращает максимальную длину значения типа Wide_String, возвращенного при обращении к S'Wide_Image, как значение типа Universal_Integer.

   
S'Width  -  где S: любой скалярный тип.

Возвращает максимальную длину значения типа String, возвращенного при обращении к S'Image, как значение типа Universal_Integer.

   
S'Write  -  где S: любой тип.

Процедура записывающая значение ее второго параметра в поток, который указан ее первым параметром.

   
S'Class'Write  -  где S'Class: любой надклассовый тип.

Процедура выполняющая диспетчеризацию (перенаправление) вызова к подпрограмме указываемой атрибутом 'Write

для типа, который идентифицируется значением тэга ее второго параметра.



Стандартные директивы Ады


Список стандартных директив компилятора Ады приводится в приложении L (Annex L) руководства по языку программирования Ада (RM-95).

All_Calls_Remote[(library_unit_name)]; Для выполнения вызова подпрограмм пакета всегда использовать механизм RPC (Remote Procedure Call - вызов удаленной подпрограммы)
   
Asynchronous(local_name);  -  Вызов подпрограммы производится асинхронно. При этом, активируется выполнение удаленной подпрограммы и, не дожидаясь её завершения, происходит продолжение выполнения вызвавшей подпрограммы.
   
Atomic(local_name);  -  Чтение/запись указанного объекта должно выполняться без прерываний
   
Atomic_Components(array_local_name);  -  Чтение/запись указанного массива компонентов должно выполняться без прерываний
   
Attach_Handler(handler_name, expression);  -  Установить процедуру обработки прерывания
   
Controlled(first_subtype, local_name);  -  Отключает "сборку мусора" для указанного типа данных.

(не имеет эффекта в реализации компилятора gnat)

   
Convention(
 [Convention =>] convention_identifier,
 [Entity=>] local_name);
 -  Использовать соответствующие языковые соглашения для указанного объекта
   
Discard_Names[([On =>] local_name)];  -  Отказаться от ASCII-представления объекта, которое используется атрибутом 'Img

   
Elaborate(
 library_unit_name{, library_unit_name});
 -  Предварительно выполнить элаборацию указанного пакета
   
Elaborate_All(
 library_unit_name{, library_unit_name});
 -  Предварительно выполнить элаборацию всех спецификаций и тел пакетов от которых зависит указанный модуль
   
Elaborate_Body[(library_unit_name)];  -  Выполнить элаборацию тела указанного модуля сразу после элаборации его спецификации
   
Export(

 [Convention =>] convention_identifier,

 [Entity =>] local_name[,

  [External_name =>] string_expression]

 [, [Link_Name =>] string_expression]);

 -  Экспортировать объект из Ада-программы для использования в другом языке программирования
   
   
Import(

 [Convention =>] convention_identifier,

 [Entity =>] local_name[,

  [External_name =>] string_expression]

 [, [Link_Name =>] string_expression]);

 -  Импортирует объект, описанный средствами другого языка программирования, для использования его в Ада-программе
   
   
Inline(name{, name});  -  Указывает подпрограмму при обращении к которой должна осуществляться встроенная подстановка машинного кода этой подпрограммы вместо выполнения стандартного вызова этой подпрограммы (так называемая inline-подстановка).
   
Inspection_Point
 [(object_name{, object_name})];
 -  В данной точке программы должна быть обеспечена возможность чтения значения указанного объекта (необходимо для сертификации правильности кода).
Interrupt_Handler(handler_name);  -  Указывает процедуру-обработчик прерывания
   
Interrupt_Priority([expression]);  -  Определяет приоритет задачи и/или защищенного объекта для случаев возникновения блокировки
Linker_Options(string_expression);  -  Передает строку опций для компоновщика (linker).
   
List(identifier);  -  Вывести листинг исходного текста после компиляции.
   
Locking_Policy(policy_identifier);  -  Определяет как защищенный объект будет заблокирован при возникновении блокировки.
   
Normalize_Scalars;  -  Устанавливать, когда это возможно, значения скалярных переменных в недопустимое значение
   
Optimize(identifier);  -  Указать как должны быть оптимизированы инструкции
   
Pack(first_subtype_local_name);  -  Указывает, что тип данных должен быть упакован
   
Page;  -  Указывает на начало новой страницы в листинге программы
   
Preelaborate(library_unit_name);  -  Указывает на необходимость предварительной элаборации указаанного пакета
   
Priority(expression);  -  Определяет приоритет задачи
   
Pure[(library_unit_name)];  -  Указывает, что пакет "чистый" (pure).
   
Queuing_Policy(policy_identifier);  -  Определяет правило сортировки задач и/или защищенных объектов при постановке в очередь.
Remote_Call_Interface[(library_unit_name)];  -  Подпрограммы пакета могут вызываться с использованием механизма RPC (Remote Procedure Call - вызов удаленной подпрограммы)
   
Remote_Types[(library_unit_name)];  -  Пакет определяет типы, предназначенные для использования совместно с механизмом RPC (Remote Procedure Call - вызов удаленной подпрограммы)
   
Restrictions(restriction{, restriction});  -  Отключает некоторые языковые средства.
   
Reviewable;  -  Предусматривает профилирование во время выполнения (подобно gprof).
   
Shared_Passive[(library_unit_name)];  -  Используется для совместного использования глобальных данных между разными RPC-разделами распределенной программы.
   
Storage_Size(expression);  -  Указывает общий размер пространства стека для задачи.
   
Suppress(identifier[, [On =>] name]);  -  Отключает специфические проверки для общих исключений.
   
Task_Dispatching(policy_identifier);  -  Определяет, для задачи, правила сортировки вызовов при диспетчеризации (например, FIFO_Within_Priorities).
   
Volatile(local_name);  -  Указывает, что значение переменной может изменяться в непредсказуемые моменты, вне зависимости от работы программы.
   
Volatile_Components(array_local_name);  -  Указывает, что значение массива компонентов может изменяться в непредсказуемые моменты, вне зависимости от работы программы.