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



         

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


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

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.

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




Содержание  Назад  Вперед