Глава 13. СПЕЦИФИКАТОРЫ ПРЕДСТАВЛЕНИЯ И ОСОБЕННОСТИ, ЗАВИСЯЩИЕ ОТ РЕАЛИЗАЦИИ

Содержание

13.1. СПЕЦИФИКАТОРЫ ПРЕДСТАВЛЕНИЯ
13.2. СПЕЦИФИКАТОРЫ ДЛИНЫ
13.3. СПЕЦИФИКАТОРЫ ПРЕДСТАВЛЕНИЯ ПЕРЕЧИСЛЕНИЯ
13.4. СПЕЦИФИКАТОРЫ ПРЕДСТАВЛЕНИЯ ЗАПИСЕЙ
13.5. СПЕЦИФИКАТОРЫ АДРЕСА
13.6. ИЗМЕНЕНИЕ ПРЕДСТАВЛЕНИЯ
13.7. СИСТЕМНЫЙ ПАКЕТ
13.8. ВСТАВКИ МАШИННЫХ КОДОВ
13.9. СВЯЗЬ С ДРУГИМИ ЯЗЫКАМИ
13.10. НЕКОНТРОЛИРУЕМОЕ ПРОГРАММИРОВАНИЕ

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

13.1. СПЕЦИФИКАТОРЫ ПРЕДСТАВЛЕНИЯ

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

спецификатор-представления :: = спецификатор-представления-типа | спецификатор-адресаспецификатор-представления-типа ::= спецификатор-длины   | спецификатор-представления-перечисления   | спецификатор-представления-записи

Спецификатор представления типа применяется либо к типу, либо к первому именованному подтипу (т.е. подтипу, идентифицированному описанием типа, базовый тип которого является анонимным). Такой спецификатор представления применяется ко всем объектам данного типа или данного первого именованного подтипа. Для конкретного типа допустимо не более одного спецификатора представления перечисления или записи; спецификатор представления перечисления допустим только для перечислимого типа; спецификатор представления записи — только для именуемого типа. (С Другой стороны, для конкретного типа может быть задано более одного спецификатора длины; более того, могут быть одновременно заданы спецификатор длины и спецификатор представления записи или перечисления.) Спецификатор длины — это единственный из спецификаторов представления, допустимый для производного от родительского типа, имеющего (определенные пользователем) наследуемые подпрограммы.

Спецификатор адреса применяется либо к объекту, либо к подпрограмме, пакету или за-дачному модулю, либо к входу. Для любого из этих понятий допустимо не более одного спецификатора адреса.

Спецификатор представления и описание понятия, к которому применяется спецификатор, должны оба находиться непосредственно в одном и том же разделе описаний, спецификации пакета или спецификации задачи; описание должно помещаться до спецификатора. В отсутствие спецификатора представления для данного описания реализация определяет представление по умолчанию. Место нахождения такого подразумеваемого определения представления по умолчанию — не позже конца непосредственно объемлющего раздела описаний, спецификаций пакета или задачи. Для описания из раздела описаний место нахождения подразумеваемого определения по умолчанию — до любого вложенного тела.

В случае типа некоторые вхождения его имени неявно предполагают, что представление типа уже должно быть определено. Следовательно, такие вхождения требуют определения по умолчанию любого способа представления, еще не определенного предшествующим спецификатором представления типа. Аналогичные вхождения имени подтипа этого типа или имени любого типа или подтипа с подкомпонентами данного типа также требуют определения по умолчанию. Требуемое вхождение — это любое вхождение, отличное от вхождения в описание типа или подтипа, спецификацию подпрограммы, описание входа, описание субконстанты, прагму или спецификатор представления для самого типа. В любом случае вхождение в выражение является всегда требуемым.

Спецификатор представления для данного понятия не должен помещаться после вхождения имени понятия, если вхождение требует определения представления этого понятия по умолчанию.

Аналогичные ограничения существуют для спецификатора адреса. Любое вхождение имени объекта (после описания объекта) требует определения представления. Для подпрограммы, пакета, задачного модуля или входа любое вхождение атрибута представления таких понятий является требуемым вхождением.

Результат предвыполнения спецификатора аспектов представления — определение соответствующих представления.

Интерпретация некоторых выражений, помещенных в спецификаторах представления, зависит от реализации, например, выражений, задающих адреса. Реализация может ограничивать использование спецификаторов представления лишь теми, которые можно просто обрабатывать на имеющемся оборудовании. Для учитываемых реализации спецификаторов представления компилятор должен гарантировать назависимость конечного результата работы программы от наличия или отсутствия таких спецификаторов представления, исключая спецификатор адреса и те разделы программы, где используются атрибуты представления. Если программа содержит спецификатор представления, который не учитывается реализацией, она неправильна. Для каждой реализации в приложении даются правила составления руководства по языку, в котором должны быть описаны допустимые ею спецификаторы представления и соглашения для выражений, зависящих от реализации.

Если спецификатор представления используется для того, чтобы предписывать некоторые характеристики отображения понятия в объектной машине, то для выбора такого отображения реализация может использовать прагмы. Прагма PACK указывает, что минимизация размера памяти является главным критерием при выборе представления именуемого или индексируемого типа. Ее форма такова:

pragma PACK (простое имя- типа);

Упаковка означает, что промежутки между областями памяти, выделенные под последовательные компоненты, следует минимизировать, упаковка не влияет на отображение в памяти каждой компоненты. На отображение компонент можно повлиять прагмой (или спецификатором представления) для компоненты или типа компоненты. Место прагмы PACK в программе и ограничения на именованный тип подчинены тем же правилам, что и для спецификатора представления; в частности, прагма должна помещаться до любого использования атрибута представления упакованного понятия.

Прагма PACK — единственная определенная в языке прагма, связанная с представлением. Реализация может вводить дополнительные прагмы; они должны быть перечислены в приложении F. (В отличие от спецификаторов представления прагма, которая не принята в реализации, игнорируется.)

Примечание. Для формального типа настройки недопустим спецификатор представления.

Ссылки: атрибут представления 13,7.2, 13.7.3, вход 9.5, выражение 4.4, выражение по умолчанию 3.2.1, должно 1.6, допустим 1.6, задачный модуль 9, имя 4.1, компонента 3.3, наследуемая подпрограмма 3.4, находится непосредственно в 8.1, неправильная 1.6, объект 3.2, описание 3.1, описание подтипа 3.3.2, описание субконстанты 7.4, описание типа 3.3.1, пакет 7, подкомпонента 3.3, подпрограмма 6, подтип 3.3, понятие 3.1, прагма 2.8, производный тип 3.4, раздел описаний 3.9, родительский тип 3.4, спецификатор адреса 13.5, спецификатор длины 13.2, спецификация задачи 9.1, спецификация пакета 7.1, спецификатор представления записи 13.4, спецификатор представления перечисления 13.3, тело 3.9, тип 3.3, формальный тип настройки 12.1.2.