Н. Джехани - Язык Ада (1988) (1160771), страница 113
Текст из файла (страница 113)
дачному модулю, либо к входу. Для любого из этих понятий допустимо не более одного спецификатора адреса. Спецификатор представления и описание понятия, к которому применяется спецификатор, должны оба находиться непосредственно в одном и том же разделе описаний, специфи.
кации пакета или спецификации задачи; описание должно помещаться до спецификатора. В отсутствие спецификатора представления для данного описания реализация определяет представление по умолчанию. Место нахождения такого подразумеваемого определения представления по умолчанию — не позже конца непосредственно объемлющего раздела описаний, спецификаций пакета или задачи. Для описания из раздела описаний место нахождения подразумеваемого определения по умолчанию — до любого вложенного тела. В случае типа некоторые вхождения его имени неявно предполагают, что представление типа уже должно быть определено.
Следовательно, такие вхождения требуют определения по умолчанию любого способа представления, еще не определенного предшествующим спецификатором представления типа. Аналогичные вхождения имени подтипа этого типа или имени любого типа или подтипа с подкомпонентами данного типа также требуют определения по умолчанию. Требуемое вхождение — это любое вхождение, отличное от вхождения в описание типа или подтипа, спецификацию подпрограммы, описание входа, описание субконстанты, прагму или спецификатор представления для самого типа.
В любом случае вхождение в выражение является всегда требуемым. Глава 13 Спецификатор представления для данного понятия не должен помещаться после вхождения имени понятия, если вхождение требует определения представления этого понятия по умолчанию. Аналогичные ограничения существуют для спецификатора адреса. Любое вхождение име. ни объекта (после описания объекта) требует определения представления. Для подпрограммы, пакета, задачного модуля или входа любое вхождение атрибута представления таких понятий является требуемым вхождением. Результат предвыполнения спецификатора аспектов представления — определение соот. ветствующих представления.
Интерпретация некоторых выражений, помещенных в спецификаторах представления, зависит от реализации, например, выражений, задающих адреса. Реализация может ограничи. вать использование спецификаторов представления лишь теми, которые можно просто обра. батывать на имеющемся оборудовании. Для учитываемых реализаций спецификаторов представления компилятор должен гарантировать назависимость конечного результата работы программы от наличия или отсутствия таких спецификаторов представления, исключая спецификатор адреса и те разделы программы, где используются атрибуты представления. Если программа содержит спецификатор представления, которыи не учитывается реализациеи, она неправильна.
Для каждои реализации в приложении даются правила составления руководства по языку, в котором должны быть описаны допустимые ею спецификаторы представления и соглашения для выражений, зависящих от реализации. Если спецификатор представления используется для того, чтобы предписывать некоторые характеристики отображения понятия в объектной машине, то для выбора такого отображения реализация может использовать прагмы. Прагма РАСК указывает, что минимизация раз. мера памяти является главным критерием при выборе представления именуемого или индексируемого типа. Ее форма такова: ргадпта РАСК (простое имя типа); Упаковка означает, что промежутки между областями памяти, выделенные под последовательные компоненты, следует минимизировать, упаковка не влияет на отображение в памяти каждой компоненты.
На отображение компонент можно повлиять прагмой (или специфика- тором представления) для компоненты или типа компоненты. Место прагмы РАСК в программе и ограничения на именованный тип подчинены тем же правилам, что и для спецификатора представления; в частности, прагма должна помещаться до любого использо. ванна атрибута представления упакованного понятия. Прагма РАСК вЂ” единственная определенная в языке прагма, связанная с представлением.
Реализация может вводить дополнительные прагмы; они должны быть перечислены в приложении Р. (В отличие от спецификаторов представления прагма, которая не принята в реализации, игнорируется.) Примечание. Для формального типа настройки недопустим спецификатор представления. Ссылки: атрибут представления 13,7.2, 13.7.3, вход 9.5, выражение 4.4, выражение по умолчанию 3.2.1, должно 1.6, допустим 1.6, задачный модуль 9, имя 4.1, компонента 3.3, наследуемая подпрограмма 3.4, находится непосредственно в 6.1, неправильная 1.6, объект 3.2, описание 3.1, описание подтипа 3.3.2, описание субконстанты 7.4, описание типа 3.3.1, пакет 7, подкомпонента 3.3, подпрограмма 6, подтип 3.3, понятие 3.1, прагма 2.6, производный тип 3.4, раздел описании 3.9, родительскии тип 3.4, спецификатор адреса 13.5, спецификатор длины 13.2, спе.
цификация задачи 9.1, спецификация пакета 7.1, спецификатор представления записи 13.4, спецификатор представления перечисления 13.3, тело 3.9, тип З.З, формальный тип настройки 12.1.2. 13.2. СПЕЦИФИКАТОРЫ ДЛИНЫ Спецификатор длины задает объем памяти: спецификатор длины::= )ог атрибут взе простое выражение; Выражение должно быть некоторого числового типа; оно вычисляется.при предвыполнении спецификатора длины (кроме случая, когда оно является статическим). Префикс атрибута должен обозначать либо тип, либо первый именованный подтип. Далее этот префикс обозначается буквой Т. В спецификаторе длины в качестве обозначений атрибутов допустимы только 812Е, 8ТОЯАОЕ..В)2Е и ВМАь(..
Результат применения спецификатора длины зависит от обозначения атрибута. а) Спецификация размера: Т'812Е Сле око ы о отавленмя и оообенноогщ звонов не от алмаз но Выражение должно быть статическим некоторого целого типа. Его значение определяет максимальное число битов, используемых для размещения в памяти объектов типа или первого именованного подтипа Т. Спецификация размера должна задавать объем памяти, достаточный для размещения любого допустимого значения таких объектов. Спецификация размера для составного типа может повлиять на размер промежутков между областями памяти, отводимыми под последовательные компоненты.
С другой стороны, нет необходимости влиять на размер области памяти, отводимои для каждой компоненты. Спецификация размера допустима, только если ограничения на Т и его компоненты (если они есть) являются статическими. Для неограниченного индексируемого типа статическими должны быть также подтипы индексов. б) Спецификация размера набора: Т'ЗТОЯАОЕ 8)2Е Префикс Т должен обозначать ссылочный тип. Выражение должно быть некоторого це. лого типа (но не обязательно статическим); его значение определяет число квантов памяти, выделяемых для набора, т.е. объем памяти, необходимый для размещения всех объектов, указанных значениями ссылочного типа и значениями других типов, непосредственно ипи косвен.
но производных от ссылочного типа. Эта форма спецификатора длины недопустима для типа, производного от ссылочного типа. в) Спецификация объема памяти для активизации задачи: Т'ЗТОВАОЕ 8)ЕЕ Префикс Т должен обозначать задачный тип. Выражение должно быть некоторого целого типа (но не обязательно статическим); его значение определяет число квантов памяти, выделяемых для активизации (но не для кода) задачи данного типа. г) Спецификация наименьшего для фиксированных типов: Т'ЗМА(2. Префикс Т должен обозначать первый именованный подтип фиксированного типа.
Выражение должно быть статическим некоторого вещественного типа; его значение должно быть не больше, чем дельта этого первого поименованного подтипа. Результат применения спецификатора длины — использование этого наименьшего значения для представления значений фиксированного базового типа.(Спецификатор длины, таким образом, также влияет на выде.
ленный для объектов этого типа объем памяти.) Примечание. Спецификация размера допустима для ссылочного, эадачного или фиксированного типов независимо от того, задана или нет для такого типа какая-либо другая форма спецификатора длины. От реализации зависит, чтб понимается под резервированием части памяти для набора или активизации задачи. Поэтому управление с помощью спецификаторов длины зависит от соглашений в реализации. Например, в языке не определено, включается ли в память, выделяемую для активизации задачи память, необходимая для размещения набора, сопоставленного ссылочному типу и описанному в теле задачи.
Метод распределения памяти под объекты, обозначенные значениями ссылочного типа, также не определяется. Например, место может выделяться в стеке; можно испольэовать схему настраиваемого динамического распределения памяти, или память может быть зафиксирована, Размещенные объекты набора не обязаны занимать одинаковые размеры памяти, если указанный тип — это неограниченный индексируемый тип ипи неограниченный тип с дискриминантами. Заметим также, что сам генератор может требовать некоторыи объем памяти для размещения внутренних таблиц и связей. Следовательно, спецификатор длины для набора ссылочного типа не всегда позволяет точно управлять максимальным числом генерируемых объектов.
Прнмерьс — предполагаемые описания: 1ура МЕО!ОМ Ь 7апве 0 .. 66000; !ура ЗНОЯТ ! ° вайа 0.01 голее -100.0 .. 100.0; 1уре ОЕОЯЕЕ ! ° Вайа 0.1 пище -360.0,. 360.0; Вуте: оопазап1:= В; РАОе: попа!аж;= 2000; — спецификаторы длины: !ог СО1.ОЯ'5!2Е оае 1*ВУТЕ; — см.
3.5.1 Ьи МЕО!ОМ'512Е иае 2аВУТЕ; !ог ЗНОЯТ5!2Е иаа 16; сля нлме'ЗТОяА6 5!26 иае -- примерно 2000 машин 2000 !!САЯ'3!26/ЗУЗТЕМ.ЗТОЯАОЕ ОН!Т) е 1); !5-797 «ива 15 !ог КЕУ8ОАЯО 081ЧЕЯ'ЗТОЯАОЕ 517Е ааа 1аРАОЕ: гог ОЕОЯЕЕ'ЗМАО. еае 380.0/2аа(ЗУЗТЕМ.ЗТОЯАОЕ ЦН)т - 1); Примечание к примерам. В спецификаторе длины для ЗНОЯТ минимально необходимы пятнадцать разрядов, так как определение типа требует ЗНОЯТ'ЗМАЕЕ = 2.0**(-7) и ЗНОЯТ'МАНТ(ЗЗА = 14.
Спецификатор длины для ОЕЗЯЕЕ вводит модельные числа, которые занимают в точности весь диапазон типа. Ссылки: активизация задачи 9.3, атрибут 4П.4, вещественный тип 3.5.5, выражение 4.4, вы. численно 4.5, генератор 4.8, дельта фиксированного типа 3.5.9, должен 1.6, допустим 1.6, задача 9, задачный тип 9.1, именуемый тип 3.7, индексируемыи тип 3.6, квант памяти 13.7, подкомпонента 3.3, набор 3.8, наименьшее фиксированного типа 3.5.10, неограниченныи индексируемый тип 3.6, объект 3.2, ограничение 3.3, пакет ЗУЗТЕМ 13.7, первый именованный подтип 13.1, подтип индекса 3.6, понятие 3.1, предвыполнение 3.9, производный тип 3.4, составной тип З.З, спецификация задачи 9.1, ссылочный тип 3.8, статический подтип 4.9, статическое выражение 4.9, статическое ограничение 4.9, тип 3.3, указывать 3.8, фиксированный тип 3.5.9, целый тип 3.5.4, числовой тип 3.5.