Н. Джехани - Язык Ада (1988) (1160771), страница 112
Текст из файла (страница 112)
ров настройки 12.3, фактический тип настройки 12.1.2, фиксированный тип 3.5.9, формальный тип настройки 12.1.2, целый тип 3.5.4. 12.34. ПРАВИЛА СОПОСТАВЛЕНИЯ ДЛЯ ФОРМАЛЬНЫХ ИНДЕКСИРУЕМЫХ ТИПОВ Формальному индексируемому типу сопоставляется фактический индексируемый подтип, удовлетворяющий следующим условиям: ° Формальный и фактический индексируемые типы должны иметь одинаковые размерности; формальный тип и фактический подтип должны быть либо оба ограниченными, либо оба неограниченными. Нас иваемые и» ° Для каждой позиции индекса тип индекса фактического индексируемого типа должен совпадать с типом индекса формального индексируемого типа.
° Типы компонент фактического и формального индексируемых типов должны быть одинаковыми. Если тип компоненты отличен от скалярного, то подтипы компонент фактического и формального индексируемых типов должны быть либо оба ограниченными, либо оба неограниченнымн.
Если настраиваемый модуль имеет формальный индексируемыи тип, то при предвыпо. лнении соответствующей конкретизации проверяются совпадения ограничений (если они есть) на тип компоненты фактического индексируемого типа с ограничениями для формального индексируемого типа; дпя любой данной позиции индекса индексируемых подтипов или дискретных диапазонов проверяется совпадение границ. При несовпадениях возбуждается исключение СОНЗТНА(НТ ЕЯНОН. Пример: — задание настраиваемого пакета Вапапа тура 1ТЕМ 1 ° ритам; тур !НОЕХ !а (<>); тура честОй 1 ° агму Вмбех гапва <>) о! )тем; тура ТАВ1.Е (а аиау ((НОЕХ) о! )ТЕМ; рааааеа Р га апвл — даны типы тура М!Х 1 ° агму (СОЬОй !апре <>) о! ВООЬЕАНВ1 тура ОРТЮМ 1 ° апау (СОьОй) О! ВООЬЕАрд — теперь тип М)Х может быть сопоставлен типу ЧЕСТОН, а — ОРТ)ОН вЂ” типу ТАВЬЕ развала й 1 ° паи Р((ТЕМ => ВООЬЕАМ, 1МОЕХ => СОьОй, ЧЕСТОй => М1Х, ТАВ(.Е => ОРТ!ОМ); — таперь тнп М)Х на может быть оопоотаапен типу ТАВьЕ, — а тнп ОРТГОЙ вЂ” типу ЧЕСТОН Примечание.
Если тип любого индекса или тип компоненты формального индексируемого типа сам является формальным типом, то по приведенным правилам в экземпляре его имя обозначает соответствующий фактический подтип (см. 12.3 г)). Ссьюки: индекс 3.6, индексируемый тип 3.6, исключение СОНЗТНА(НТ ЕННОН 11.1, компо. нента массива 3.6, конкретизация настройки 12.3, неограниченный индексируемый тип 3.6, ограничение 3.3, ограничение индекса 3.6.1, ограниченный индексируемыи тип 3.6, оператор возбуждения исключения 11.3, определение индексируемого типа 3.6, подтип 3.3, предвыпо. лнение 39, сопоставление фактических параметров настройки 12.3, формальный тип !2.1, формальный тип настройки 12.1.2. 12.3.6.
ПРАВИЛО СОПОСТАВЛЕНИЯ ДЛЯ ФОРМАЛЬНЫХ ССЫЛОЧНЫХ ТИПОВ Формальному ссылочному типу сопоставляется фактический ссылочный подтип, если тип указываемых объектов для формального и фактического типов один и тот же. Если указывае. мый тип отличен от скалярного, то указываемые подтипы должны быть либо оба ограничен. ными, либо оба неограниченными. Если настраиваемый модуль имеет формальный ссылочный тип, то при предвыполнении соответствующей конкретизации проверяется совпадение любых ограничений на указанные объекты фактического и формального ссылочных типов. При несовпадении возбуждается исключение СОНЗТНА(КТ ЕННОН.
Пример: — формальным типам настраиваемого пакета Вепапо тура нООе 1 ° рита!а; Глава 12 !ура ОМК (в асеева МООЕ; раскарв Р 1 ° -- могут быть сопоставлены фактические типы тура САН: зуре САН МАМЕ 1 ° весела САЯ; тура САЯ и гвсол( РНЕ6, 8ОСС; САй МАМЕ; МОМВЕЯ: ОСЕМ8Е МОМВЕЯ; ОУУМЕЯ: РЕНЗОМ: впа масса; — в следующеи конкретизации настройки рвсмвзв й 1 ° песу Р(МООЕ => САй, ЫМК => САЯ МАМЕ): Примечание.
Если указанный тип сам является формальным, то в соответствии с описанными выше правилами в экземпляре его имя обозначает соответствующий фактическии подтип (см. 12.3 г)). Ссылки: значение ссылочного типа 3.8, исключение СОМВТЯА(МТ.. ЕЯЯОЯ 11.1, конкретизация настройки 12.3, объект 3.2, ограничение 3.3, оператор возбуждения исключения 11.3, опре. деление ссыпочного типа 3.8, предвыполненив 3.9, сопоставление фактических параметров настройки 12.3, ссылочный тип 3.8, указывать 3.8, формальный тип настройки 12.1.2.
12.3.6. ПРАВИЛА СОПОСТАВЛЕНИЯ ДЛЯ ФОРМАЛЬНЫХ ПОДПРОГРАММ Формальной подпрограмме сопоставляется фактическая подпрограмма, литерал перечисления или вход, если в первом и последнем случаях профиль типов параметров и результата один и тот же (см. 6.6) и виды формальных и фактических параметров в одинаковых позици. ях должны быть одинаковыми. Если настраиваемый модуль имеет формальную подпрограмму, заданную именем, то это имя должно обозначать подпрограмму, литерал перечисления или вход, сопоставленные формальной подпрограмме (в указанном выше смысле). Вычисление имени по умолчанию производится во время предвыпопнения каждой конкретизации, в которой используется это умолчание, как определено в равд.
12.3. Если настраиваемыи модуль имеет подпрограмму по умолчанию, специфицированную как бокс, то соответствующий фактический параметр может быть опущен, если подпрограмма, литерал перечисления или вход, сопоставлявмые формальной подпрограмме, имеют то же обо. значение, что и формальная подпрограмма, и непосредственно на месте конкретизации должна быть видима единственная такая подпрограмма, или литерал перечисления, или вход.
Пример: -- дана спецификация настраиваемой функции Велено тура 1ТЕМ 1 ° рлуасе; м(вй Млсаоп ЪГ (О. Ч: !ТЕМ) мллп (ТЕМ 1 ° <>: (плсзюл 80ОАнлч6(х: (тем1 гевал (тем; -- и функция Ь В МАТЯ(Х РНО6ОСТ(А. В: Мятй(Х) гвь л МАтй(Х; — возможна следующая конкретизация !ппсаол 50ОАЯЕ 1в пем 50ОАЯ(М6(МАТЯ1Х. МАТН(Х РЯОООСТ1; — следующие конкретизации эквивалентны амсвоп 80ОАяе 1 ° псе 80ОАЯ(мбптем => !мтебея, "*" => "в"1; Ъпсаол 80ОАЯЕ М пем 80ОАН(М6(1МТЕ6ЕЯ, *"1: !лпсеоп 50ОАЯЕ 1 ° лма 80ОАН(М6((МТЕСЕН); Наст аиааамые мо лн Примечание. Правила сопоставления для формальных подпрограмм устанавливают требования, которые подобны требованиям, применяемым к описаниям переименования подпрограмм (см. 8.5). В частности, не требуется совпадения имен соответствующих параметров фор. мальной и фактической подпрограмм; аналогично для таких параметров не обязательно соот.
ветствие выражений по умолчанию. Формальной подпрограмме сопоставляется атрибут типа, если этот атрибут — функция с сопоставимой спецификациеи. Литерал перечисления данного'типа сопоставляется с формальнои функцией без параметров и результатом данного типа. Ссылки: атрибут 4.1.4, видимость 8.3, вход 9.5, имя 4.1, конкретизация настройки 12.3, обозначение 6.1, ограничитель бокс 12.1.2, подпрограмма 6, подтип 3.3, профиль типа параметров и результата 6.3, сопоставление фактических параметров настройки 12.3, спецификация подпрограммы 6.1, фактический тип настройки 12.3, формальная подпрограмма настройки 12.1, формальныи тип настройки 12.1.2, функция 6.5.
12.4. ПРИМЕР НАСТРАИВАЕМОГО ПАКЕТА В следующем примере использован настраиваемый пакет для одной из возможных организаций стеков. Размер каждого стека и тип его элементов являются параметрами настройки. Вале(с $12Е: РОЗ(Т(ЧЕ; !ура (ТЕМ 1 ° рсма!е; Расмжа 5ТАСК Ь рп!салага РОЗН (Е: (п 1ТЕМ); ргосологе РОР (Е: ооз (ТЕМ); ОЧЕЙЕЬОЮ, ОМОЕВРЬОЮ: ахсер!Ьи; ам! ЗТАСК; РасьаВа Вову ЗТАСК Ь !ура ТАВЬЕ Ь апау (Р081Т(ЧЕ гапВе <>) о( 1ТЕМ; ЗРАСЕ: ТАВьЕ(1 .. 812Е); 1МОЕХ: МАТОПА1.: 0; рмсоепга РОЗН(Е: Ь (ТЕМ) Ь Вав(п Л (МОЕХ >= 812Е (аеп гам ° ОЧЕЛРЬОЧЧ; ам( Л; ПЧОЕХ:= ПЧОЕХ + 1; ЗРАСЕ((МОЕХ):= Е; мп! РОЗН; рюсайие РОР(Е: оас 1ТЕМ) 1 ° вав(п Л (МОЕХ = 0 !Лаи га!се ОМОЕЯРЬОЧУ; апл Л; Е:= ЗРАСЕ(ПЧОЕХ); ПЧОЕХ:= 1МОЕХ - 1; опл РОР; апв ЗТАСК; Экземпляры настраиваемого пакета могут быть получены так: расзааа ЗТАСК (МТ Ь пем ЗТАСК(812Е => 200, (ТЕМ -> 1МТЕОЕВ); расвава ЗТАСК 8001.
Ь паж ЗТАСК(100, ВООьЕАМ); После этого могут быть вызваны процедуры конкретизированных пакетов: ЗТАСК 1МТ.РО5Н(М),' ЗТАСК ВОООРОЗН(ТВОЕ): Возможна другая организация стека (тело пакета опущено]: Вснмм !ура !ТЕМ 1 ° ргмжа! Глава уг РааааВЕ ОМ ЗТАСКЗ Ь Фура ЗТАСК1817Е: РО81Т1ЧЕ1 Ь Етнез внаем: рпмеееге РОЗН18: Ь вп ЗТАСК; Е: 1и 1ТЕМ1; рппииапе РОР 1$: Ь оиз ЗТАСК; Е: оет 1ТЕМ1; ОЧЕЯУЬОУЧ, ОМОЕЯРьОУЧ: ммерВои; рата за ~ура ТАвьЕ Ь епау 1Р081Т1ЧЕ мпВе <>1 оу 1ТЕМ; гуре ЗТАСК181ЕЕ: РО81ПЧЕ1 Ь мооп1 ЗРАСЕ: ТАВЬЕ11 .. $12Е1; ПЧОЕХ: МАТОЯА1.: 0; еид гаага~ аиа: При использовании такого пакета сначала должна быть осуществлена конкретизация, по.
еле чего можно описать стеки с элементами соответствующего типа: ае Ье раайаВЕ ЗТАСК ЯЕАЬ Ь има ОМ ЗТАСК81ЯЕАЦ; иее ЗТАСК ЯЕАО 8: ЗТАСК11001; Ва81п РОЗН18, 2.$41; апа; Глава 13 СПЕЦИФИКАТОРЫ ПРЕДСТАВЛЕНИЯ И ОСОБЕННОСТИ, ЗАВИСЯЩИЕ ОТ РЕАЛИЗАЦИИ В этой главе описываются спецификаторы представления, зависящие от реализации особенности, а также некоторые воэможности, используемые в системном программи.' ровании. 13.1.
СПЕЦИФИКАТОРЫ ПРЕДСТАВЛЕНИЯ Спецификаторы представления задают способ представления типов в объектной машине дпя более эффективного представления или для интерфейса с внеязыковой сферои (например, с периферийным оборудованием). спецификвтор представления с = спецификатор представления типа ( спецификатор адреса спецификатор представления типа::= спецификатор длины спецификатор представления перечисления спецификатор представления записи Спецификатор представления типа применяется либо к типу, либо к первому именованному подтипу (т.е.
подтипу, идентифицированному описанием типа, базовый тип которого является анонимным). Такой спецификатор представления применяется ко всем объектам данного типа или данного первого именованного подтипа. Для конкретного типа допустимо не более одного спецификатора представления перечисления или записи; спецификатор представления перечисления допустим только для перечислимого типа; спецификатор представления записи — только для именуемого типа.(С другой стороны, дпя конкретного типа может быть задано более одного спецификатора длины; более того, могут быть одновременно заданы спе. цификатор длины и спецификатор представления записи или перечисления.) Спецификатор длины — это единственный из спецификаторов представления, допустимый для производного от родительского типа, имеющего (определенные пользователем) наследуемые подпрограммы. Спецификатор адреса применяется либо к объекту, либо к подпрограмме, пакету или за.