Н. Джехани - Язык Ада (1988) (1160771), страница 83
Текст из файла (страница 83)
Явная квалификация используется также для определения совмещенной функции без параметров ипи для ограничения значения данным подтипом. Ссылки: агрегат 4.3, базовый тип 3.3, возбуждение исключений 11, вызов подпрограммы 6.4, выражение 4.4, граница диапазона 3.5, диапазон 3.3, исключение СОМЯТНА(МТ ЕВНОН 11.1, контекст разрешения совмещения 6.7, литерал перечисления 3.5.1, массив 3.6, обозначение типа 3.3.2, отношение 4.4, параметр цикла 5.5, подпрограмма 6, подтип 3.3, совмещение 8.5, тип 3.3, функция 6.5. (ег э ьг сбое'(щх) .. сООецоес) амр ...
-- квалификация необходима либо дпя Р(х, либо для Оес Ьг .) (п.СООЕ гепее НХ .. ОЕС Шер ... — квалификация не нужна ви .1 гп сбое'(Вх! .. Оес мер - — квалификация дпя Оес не нужна 002ЕН'(1 ! 3 ! 5 ! 7 => 2, еемм => О) -- см. 4.6 Глава 4 43. ГЕНЕРАТОРЫ Вычисление генератора создает объект и вырабатывает ссылочное значение, которое указывает на этот объект. генератор::= пеш указатель подтипа ( пеш квалифицированное выражение Тип порожденного генератором объекта — зто базовый тип обозначения типа, заданного либо в указании подтипа, либо в квалифицированном выражении. Для генератора с квалифицированным выражением зто выражение задает начальное значение создаваемого объекта. Тип ссылочного значения, вырабатываемого генератором, должен быть определимым только из контекста с учетом того, что это значение является ссылкой на указанный в генераторе тип.
Ограничение индекса и ограничение дискриминанта являются единственными допустимыми формами ограничения в указателе подтипа генератора. Если в генераторе есть указание подтипа и если порождаемый объект имеет индексируемый тип или тип с дискриминантами, которые не содержат выражений по умолчанию, то указание подтипа должно либо обозначать ограниченный подтип, либо содержать явное ограничение индекса или дискриминанта.
Создаваемый объект индексируемого типа или типа с дискриминантами всегда ограничен. Для генератора с указанием подтипа создаваемый объект ограничен либо этим подтипом, либо значениями дискриминанта по умолчанию. Для генератора с квалифицированным выраже. нием создаваемый объект ограничен границами или дискриминантами начального значения. Для других типов создаваемый объект имеет подтип, определенный указанивм подтипа в определении ссыпочного типа. При вычислении генератора сначала производится предвыполнение указания подтипа или вычисление квалифицированного выражения. Затем создается новый объект. Далее осуществляется инициализация, как дпя описанного объекта (см. 3.2.1): явно — для квалифицированного выражения, неявно — для указания подтипа. НаконесЬ возвращается ссылочное значение, указывающее на созданный объект.
Реализация должна гарантировать сохранение объекта, созданного при вычислении гене. ратора, до тех пор, пока объект, или хотя бы одна иэ его подкомпонент, доступен непосред. ственно или косвенно, т.е. пока он может быть обозначен некоторым именем. Кроме того, если объект или одна из его подкомпонент принадлежит задачному типу, он считается доступным, пока не завершена эта задача. Реализация может (но не обязана) освобождать память, занятую объектом, созданным генератором, как только этот объект становится недоступным.
В случаях когда требуется болев точное управление распределением памяти под указанные значениями ссылочиого типа объекты, оно может быть обеспечено следующими сред. ствами: а. Общий объем памяти, доступный для набора объектов ссылочного типа, может быть установлен с помощью спецификатора длины (см. 13.2). б. Прагма СОМТВОЕЕЕО указывает реализации на то, что для объектов, указанных значениями ссылочного типа, автоматическое возвращение памяти производиться не должно, исключая случаи выхода из самого вложенного оператора блока, тела подпрограммы или тела задачи, содержащих описание этого ссыпочного типа, ипи выхода из главной программы.
ргайпза СОМТВОь(.ЕО (простое имя ссылочного гила); Эта прагма для данного ссыпочного типа допустима в тех же местах, что и спецификатор представления этого типа (см. 13.1). в. Явного освобождения памяти, занимаемой объектом, укаэанным ссылочным значением, можно достичь вызовом процедуры, полученной настройкой предопределенной библиотечной процедуры ОМСНЕСКЕО ОЕА~(.ОСАТ(ОМ (см.
13.10.1). При исчерпании памяти генератором возбуждается исключение ЗТОВАОЕ ЕВВОВ. Заме. тим также, что исключение СОМЗТВА!МТ ЕВВОВ может быть возбуждено при вычислении квалифицированного выражения, во время предвыполнения указания подтипа ипи при инициализации. Имена л вы ажелия Примеры (ссылочных типов, описанных в раэд. 3.8): ппм СЕЬС(0. япв, ппл) — явная инициализация ппчч свес(уАО)е => О, 80сс > ппв, Рлео => пы() — явная инициализация ппчч СЕО.
— нет инициализации — даны только границы — явная инициализация пм МлтЮХ(1 .. (О, 1 .. 2О) ппм мАтя)х11 .. 10 => (1 .. 20 > 0,08 ппчч ВОРРЕЯ(100) — дан только дискриминант вигяея(8126 => во, Ров -> о, чль()е -> и .. 8о => А')) — явная инициализация 4.9. СТАТИЧЕСКИЕ ВЫРАЖЕНИЯ И СТАТИЧЕСКИЕ ПОДТИПЫ Некоторые выражения скалярного типа называются статическими. Аналогично статическими называют некоторые дискретные диапазоны, а обозначения типов для некоторых скалярных подтипов называют обозначающими статические подтипы. Выражение скалярного типа называется статическим тогда и только тогда, когда каждое первичное является одним из пвречисленных в пунктах от а до з, а каждая операция — это предопределенная операция и вычисление выражения дает значение (т.
е, не возбуждает исключения). а. Литерал перечисления (включая символьный литерал). б. Числовой литерал. в. Именованное число. г. Заданная явным описанием константа статического подтипа и инициализированная ста. тическим выражением. д. Вызов функции, имя которой — знак операции, обозначающий предопределенную операцию, включая расширенное имя; каждый фактический параметр должен быть статическим вы.
ражением. е. Определяемый в языке атрибут статического подтипа; если атрибут — функция, фактические параметры должны быть также статическими выражениями. ж Квалифицированное выражение, обозначение типа которого задает статический под. тип, а операнд — статическое выражение. э. Заключенное в скобки статическое выражение. Статическим является диапазон, границы которого — статические выражения. Статическим является ограничение диапазона, если составляющие его атрибут или простое выражение являются статическими.
Статический подтип — зто либо скалярный базовый тип, отличный от формального типа настройки, либо скалярный подтип, образованный наложением на статический подтип либо ограничения статическим диапазоном, либо ограничения плавающего или фиксированного типа, ограничение диапазона которого, если оно есть, является отатическим. Статический дискретный диапазон — это либо статический подтип, либо статический диапа.
зон. Статическое ограничение индекса — зто ограничение индекса, для которого статическим является каждый подтип индекса соответствующего индексируемого типа и для которого статическим является каждый дискретный диапазон. Статическое ограничение дискриминанта— это ограничение дискриминанта, для которого статическим является подтип каждого дискри. минанта и в котором статическим является каждое выражение.
Ссылки: библиотечный модуль 10.1, возбуждение исключений 11, вычисление квалифицированного выражения 4.6, главная программа 10.1, граница массива 3.6.1, дискриминант 3.3, завершенная задача 9.4, задачный тип 9.2, имя 4.1, индексируемый тип 3.6, инициализация 3.2.1, исключение СОМВТЯА(МТ ЕййОй 111, исключение ВТОЯАВЕ ЕййОй 11.1, квалифицирован.
ное выражение 4.7, конкретизация 12.3, контекст разрешения совмещения 8.7, набор 3.8, настраиваемая процедура 12.1, начальное значение 3.2.1, обозначение типа 3.3.2, объект 3.2.1, ограничение 3.3, ограничение дискриминанта 3.7.2, ограничение индекса З.бд, ограниченный подтип 3.3, оператор блока 5.6, описание объекта 3.2.1, описание типа 3.3.1, определение ссылочного типа 3.8, подкомпонента 3.3, подтип 3.3, прагма 2.8, предвыполнение 3.9, производный тип 3.4, простое имя 4.1, процедура 6, спецификатор длины 13.2, спецификатор представления 13.1, ссылочное значение 3.8, ссылочный тип 3.8, тело задачи 9.1, тело подпрограммы 6.7, тип 3.3, тип с дискриминантами 3.3, указание подтипа 3.3.2, указывать 3.8. Тлава 4 Примечание.
Точность вычисления статического выражения вещественного типа определе. на правилами, данными в равд. 4.5.7. Если результат не является модельным (или хранимым) числом этого типа, то значение выражения, полученное при вычислении во время компиляции, не обязано совпадать со значением, которое получится при вычислении во время счета. Атрибуты массивов не являются статическими, в частности статическим не является атрибут ЯАНЙЕ. Ссылки: атрибут 4.1.4, базовый тип 3.3, возбуждение исключений 11, выражение 4.4, грани.