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


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


В языке можно объявить именованный задачный тип. Например,

            task type анализ is

                        entry прими (Х: in сообщение );

            end анализ;

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

                                    task begin анализ is

В контексте, где доступен задачный тип "анализ", можно объявить индивидуальную задачу этого типа, скажем

                              А:  анализ; -- т.е. обычное объявление объекта.

При обработке такого объявления запускается новый асинхронный процесс типа "анализ" (т.е. создается новый объект задачного типа "анализ") и с ним связывается имя А. Если нужно, можно запустить и другие процессы этого типа объявлениями

                              А1: анализ;

                              А2: анализ; -- и т.д.

При этом доступ к входу "прими" нужного процесса обеспечивает составное имя вида А1.прими, А2.прими и т.п.

Когда же, как в нашем случае, имеется единственный процесс со входом "прими", имя задачи можно не указывать и пользоваться простым именем входа.

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

 

4.14.5.1. Отступление о задачах и подпрограммах

Может возникнуть естественный вопрос. Почему подпрограммы (процедуры и функции) не считаются в Аде данными, а "более мощные" задачи - считаются?




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