Н. Джехани - Язык Ада (1988) (1160771), страница 97
Текст из файла (страница 97)
ется, что в месте этого вхождения приемлема более чем одна трактовка идентификатора; аналогичным образом разрешение совмещения определяет фактическую трактовку вхождения операции или некоторой базовой операции. В таком месте рассматриваются все видимые описания. Вхождение правильно только тогда, когда есть точно одна интерпретация самого вложенного полного контекста. Полный контекст — это описание, оператор, спецификатор представления.
При рассмотрении возможных интерпретаций полного контекста учитываются только те правила, которые касаются синтаксиса, области действия и видимости, а также те, которые даны ниже. Учитываются; а) любое правило, которое требует, чтобы имя или выражение имели определенный тип или такой же тип, как другов имя или выражение; б) любое правило, которое требует, чтобы тип имени или выражения был типом опреде. ленного класса; аналогично любое правило, которое требует, чтобы определенный тип был дискретным, целым, вещественным, универсальным, символьным, логическим или нелимитиру. емым типом; в) любое правило, которое требует, чтобы префикс соответствовал определенному типу; г) любое правило, которое задает определенный тип в качестве типа результата базовой операции, и любое правило, которое устанавливает, что это тип определенного класса; д) правила, которые требуют, чтобы тип агрегата или строкового литерала был определен исключительно охватывающим полным контекстом (см.
4.3 и 4.2). Аналогично правила, которые требуют, чтобы тип префикса атрибута, тип выражения оператора выбора или тип операнда преобразования типа были определены независимо от контекста (см. 4.1.4, 4.6, 5.4 и 6.4.1); е) правила, данные в равд. 6.6 по разрешению вызовов совмещенных подпрограмм, в равд. 4.6 по неявным преобразованиям универсальных выражений, в равд.
3.6.1 по интерпретации дискретных диапазонов с границами, имеющими универсальный тип, в равд. 4.1.3 по интерпретации расширенного имени, чей префикс обозначает подпрограмму или оператор принятия. Имена подпрограмм, используемые в качестве аргументов прагмы, следуют другому правилу: прагма может применяться для нескольких совмещенных подпрограмм, как пояснено в равд. 6.3.2 для прапяы (Мь(МЕ, в равд. 11.7 для прагмы 80РРЙЕ88 и в равд.
13.9 для прагмы (МТЕЯРАСЕ. Подобно данные в спецификаторах контекста (см. 10.1Л) и спецификаторах адреса простые имена следуют другим правилам. Примечание. Если существует только одна возможная интерпретация, то идентификатор обозначает соответствующее понятие. Однако данное утверждение не означает, что это вхождение обязательно правильно, так как существуют другие требования, которые не учитывают. ся при разрешении совмещения: например, является ли выражение статическим, каковы виды параметров, является ли объект константой, выполняются ли правила согласования, является ли вхождение в спецификатор представления предписывающим, каков порядок предвыполнения и т,п. Аналогично при разрешении совмещения не учитываются подтипы.
(Нарушение ограничения не делает программу неправильной, но возбуждает исключение во время выполнения программы.) Спецификация параметра цикла есть описание и, следовательно, полный контекст. Правила, которые требуют, чтобы определенные конструкции имели один и тот же профиль параметров и типа результата, подпадают под категорию а); то же справедливо для правил, которые требуют согласования двух конструкций, так как это согласование требует в свою очередь, чтобы соответствующие имена имели одинаковый смысл, определенныи пра. вилами видимости и совмещения.
Ссылки: агрегат 4.3, базовая операция 3.3, вход 9.5, выражение 4.4, генератор 4.8, идентификатор 2.3, имя 4.1, исключение 11, класс типа 3.3, литерал 4.2, литерал перечисления 3.5.1, литерал пм11 3.8, оператор 5, оператор выбора 5.4, операция 4.5, операция типа 3.3.3, описание 3.1, подпрограмма 6, подтип 3.3, правильный 1.6, прагма 2.8, преобразование типа 4.6, присваивание 5.2, проверка принадлежности 4.5.2, раздел формальных параметров 6.1, совмещение П авила вн нмосги 397 6.6, спецификатор представления 13.1, спецификация параметра цикла 5.5, статическое выражение 4.9, статический подтип 4.9. Правила формы (а): выбор 3.7.3, 4.3.2, 5.4, выражение по умолчанию 3.7, 3.7.1, 6.1, 12.1.1, выражение результата 5.8, дискретный диапазон 3.6.1, 5.5, 9.5, индексное выражение 4.1.1, 4.1.2, 9.5, квалифицированное выражение 4.7, начальное значение 3.2.1, ограничение диапазона 3.5, ограничение дискриминанта 3.7.2, ограничение индекса 3.6.1, оператор задержки 9.6, переименование объекта 8.5, правила согласования 9.5, присваивание 5.2, проверка принадлежнос.
ти 4.5.2, профиль параметров и типа результата 8.5, 12.3.6, сопоставление компонент 4.3.1, 4.3.2, сопоставление параметров настройки 12.3, сопоставление параметров 6.4.1, спецификатор адреса 13.5, спецификатор представления перечислимых 13.3. Правила формы (б): атрибут ЧА( 3.5.5, выражение выбора 6.4, дискретный диапазон 3.6.1, 5.5, 9.5, именуемая компонента 4.1.3, оператор прекращения 9.10, описание плавающего типа 3.5.7, описание фиксированного типа 3.5.9, описание целого типа 3.5.4, описание числа 3.2.2, прнсваивание 5.2, проверка принадлежности 4.4, спецификатор длины 13.2, спецификатор представления записи 13.4, условие 5.3, 5.5, 5.7, 9.7.1, форма управления промежуточной про.
веркой 4.4. Правила формы (в): именуемая компонента 4.1.3, индексируемая компонента 4.1.1, отрезок 4.1.2. Правила формы (г): агрегат 4.3, генератор 4.8, литерал пмй 4.2, проверка принадлежности 4.4, строковый литерал 4.2, форма управления с промежуточной проверкой 4.4, числовой литерал 2.4. Глава Э ЗАДАЧИ Выполнение программы без задач определено в терминах последовательного выполнения ее действий в соответствии с правилами, сформулированными в других главах данного руко. водства. Можно предположить, что эти действия выполняет один логический процессор.
Под параллельным выполнением задач понимают следующее. Предполагается, что каж. дую задачу выполняет отдельный логический процессор. Различные задачи (на различных ло. гических процессорах) выполняются независимо, за исключением точек их синхронизации. Некоторые задачи могут иметь входы. Вход задачи может быть вызван другими задачами.
Задача принимает вызов одного иэ своих входов выполнением оператора принятия этого входа. Синхронизация достигается посредством рандеву между задачей, вызывающей вход, и за. дачей, принимающей вызов. Некоторые входы имеют параметры; вызовы и операторы принятия таких входов, имеющих параметры, являются основным средством обмена значениями между задачами. Свойства каждой задачи определяются соответствующим эадзчным модулем, который состоит из спецификации задачи и тела задачи. Задачные модули представляют собой одну иэ четырех форм программных модулей, из которых может состоять программа.
Другие три формы — это подпрограммы, пакеты и настраиваемые модули. В данной главе описываются свойства задачных модулей, задач и входов и операторы, влияющие на взаимодействие задач (т.е. операторы вызова входов, принятия, задержки, отбора и прекращения). Примечание. Параллельные задачи (параллельные логические процессоры) могут быть ре. ализованы на многомашинных комплексах, многопроцессорных ЭВМ или чередующимся выло. лнением на одном физическом процессоре.
С другой стороны, если реализация способна определить, что тот же результат получается при параллельном выполнении частей одной задачи на различных физических процессорах, то можно принять и такой способ выполнения; в этом случае несколько физических процессоров реализуют один логический процессор. Ссылки: вход 9.5, настраиваемый модуль 12, оператор вызова входа 9.5, оператор эадерж. ки 9.6, оператор прекращения 9.10, оператор принятия 9.5, оператор отбора 9.7, пакет 7, под. программа 6, программный модуль 6, рандеву 9.5, спецификация задачи 9.1, тело задачи 9д.
9.1. СПЕЦИФИКАЦИИ ЗАДАЧ И ТЕЛА ЗАДАЧ Задачный модуль состоит иэ спецификации задачи и тела задачи. Спецификация задачи, которая начинается зарезервированными словами ЗаеМ (уре, описывает эадачный тип. Значе. ние объекта задачного типа указывает задачу. Если задача имеет входы, то они описываются в спецификации задачи; эти входы также называются входами объекта. Выполнение задачи определяется соответствующим телом задачи. Спецификация задачи без зарезервированного слова!уре определяет одну задачу. Описа.
ние такой задачи эквивалентно описанию анонимного задачного типа одновременно с описанием объекта этого задачного типа, а идентификатор задачного модуля именует объект. В остальной части данной главы пояснения даются в терминах описаний задачного типа; соот. ветствующие пояснения для одной задачи следуют иэ упомянутого отношения эквивалентности.
описание задачи::= спецификация задачи; спецификация задачи:: = )аех [(ура) идентификатор [)з (описание входа! [спецификатор представления) епд [простое имя задачи[[ тело задачи з= (авк Ьобу простое имя задачи (з [раздел описаний[ Ьей)п последовательность операторов вчн [ехсербоп обработчик исключения (обработчик исключения)) епб [простое имя задачи); Простое имя в начале тела задачи должно совпадать с идентификатором задачного моду. ля. Аналогично если в конце спецификации или тела задачи появляется простое имя, то оно должно совпадать с идентификатором задачного модуля.