Языки программирования. Практический сравнительный анализ


Языки программирования. Практический сравнительный анализ - стр. 229


Итак, будем считать понятным, почему невыгодно считать объектами "подпрограммного" типа запуски одной и той же подпрограммы.

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

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

Добавим, что динамически возникающие подпрограммы-параметры потребовали бы (при соблюдении адовского уровня защиты) реализовать практически всю контролирующую мощь компилятора на целевой машине. Это неприемлемо для бедных бортовых машин.

Тем самым неформальная теорема "О неприемлемости для языка категории Ады "подпрограммных" типов" доказана.

     Конец отступления.

Вернемся к задачным типам.

Добавим, что объекты задачных типов могут служить компонентами объектов составных типов.

Например, можно объявить иассив из десяти "анализаторов".

       А: array (1..10) of анализ;

и обращаться к соответствующим входам с помощью индексации

                        А(1).прими ...; ...; А(10).прими ...




- Начало -  - Назад -  - Вперед -