Справочник Ada 2012
4.1.4 Атрибуты
Атрибут — это характеристика сущности, которую можно запросить с помощью ссылка_на_атрибут или ссылка_на_атрибут_диапазона.
Синтаксис
Правила разрешения имен
В ссылке_на_атрибут, если имя_атрибута относится к атрибуту, определенному для (по крайней мере некоторых) объектов типа доступа, то префикс никогда не интерпретируется как неявное_разыменование; в противном случае (и для всех ссылок_на_атрибут_диапазона), если тип имени в префиксе является типом доступа, то префикс интерпретируется как неявное_разъяменование. Аналогично, если имя_атрибута относится к атрибуту, определенному для (по крайней мере некоторых) функций, то префикс никогда не интерпретируется как безаргументный вызов функции; в противном случае (и для всех ссылок_на_атрибут_диапазона), если префикс состоит из имени, обозначающего функцию, он интерпретируется как безаргументный вызов функции.
Выражение, если таковое имеется, в имя_атрибута или имя_атрибута_диапазона должно иметь целочисленный тип.
Правила легальности
Выражение, если таковое имеется, в имя_атрибута или имя_атрибута_диапазона должно быть статическим.
Статическая семантика
Ссылка_на_атрибут обозначает значение, объект, подпрограмму или какой-либо другой вид программной сущности. Если тип является скалярным, то номинальный подтип - базовый подтип типа; если тип помечен, то номинальный подтип - первый подтип типа; в противном случае номинальный подтип - подтип типа без ограничений, исключение_нуля или предикат. Аналогично, если тип является функцией, то при скалярном типе результата подтип результата - базовый подтип типа, при помеченном типе результата - первый подтип типа, в противном случае подтип результата - подтип типа без ограничений, исключение_нуля или предикат.
Ссылка_на_атрибут_диапазона X'Range(N) эквивалентна диапазону X'First(N) .. X'Last(N), за исключением того, что префикс вычисляется только один раз. Аналогично, X'Range эквивалентен X'First .. X'Last, за исключением того, что префикс вычисляется только один раз.
Динамическая семантика
Вычисление ссылки_на_атрибут (или ссылки_на_атрибут_диапазона) заключается в вычислении префикса.
Разрешения для реализации
Реализация может предоставлять определённые ею атрибуты; идентификатор реализационно-определённого атрибута должен отличаться от идентификаторов языковых атрибутов, если это не требуется для совместимости с предыдущей редакцией этого международного стандарта.
ПРИМЕЧАНИЯ
4 Атрибуты определены в этом Международном стандарте и сведены в таблицу в K.2.
5 В общем случае имя в префиксе ссылки_на_атрибут (или ссылки_на_атрибут_диапазона) должно быть разрешено без использования контекста. Однако в случае атрибута Access ожидаемый тип для ссылки_на_атрибут должен быть единственным типом доступа, а разрешение имени может использовать тот факт, что тип объекта или профиль вызываемой сущности, обозначенные префиксом, должны соответствовать обозначенному типу или быть типами, совместимыми с обозначенным профилем типа доступа.
Примеры
Примеры атрибутов:
Color'First -- минимальное значение перечислимого типа Color (см. 3.5.1)
Rainbow'Base'First -- то же самое, что и Color'First (см. 3.5.1)
Real'Digits -- точность типа Real (см. 3.5.7)
Board'Last(2) -- верхняя граница второго измерения Board (см. 3.6.1)
Board'Range(1) -- диапазон индексов первого измерения Board (см. 3.6.1)
Pool(K)'Terminated -- True, если задача Pool(K) завершена (см. 9.1)
Date'Size -- количество битов для записей типа Date (см. 3.8)
Message'Address -- адрес переменной записи Message (см. 3.7.1)
Rainbow'Base'First -- то же самое, что и Color'First (см. 3.5.1)
Real'Digits -- точность типа Real (см. 3.5.7)
Board'Last(2) -- верхняя граница второго измерения Board (см. 3.6.1)
Board'Range(1) -- диапазон индексов первого измерения Board (см. 3.6.1)
Pool(K)'Terminated -- True, если задача Pool(K) завершена (см. 9.1)
Date'Size -- количество битов для записей типа Date (см. 3.8)
Message'Address -- адрес переменной записи Message (см. 3.7.1)