Запросы определения категорий программных модулей

Данная небольшая библиотека предоставляет набор запросов для определения категории модулей Ада-программы. Вы можете скачать архив (10К) здесь.

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

С точки зрения процесса элаборации модули разделяются на предэлаборируемые и нормальные.

С точки зрения поддержки распределенных вычислений модули подразделяются на категории Declared Pure, Shared Passive, Remote Types, Remote Call Interface. Модули, попадающие в одну из этих категорий, являются категоризованными, а все остальные - некатегоризованными.

В категорию предэлаборируемых модулей входят модули категорий Declared Pure и Shared Passive. Кроме этого предэлаборируемыми являются модули, явно объявленные таковыми посредством директивы компилятора pragma Preelaborate.

Необходимо отметить, что возможно совмещение категорий разных шкал для одного модуля. Так, например, модуль стандартной библиотеки Ada.Finalization является одновременно предэлаборируемым и Remote_Types.

Таблица 1. Соответствие категорий распределенных вычислений категориям элаборации. Допустимость совмещения категории распределенных вычислений с категорией явно определенных как предэлабориремые.

ПредэлаборируемыйНормальныйЯвное использование pragma Preelaborate
Declared Pure +
Shared Passive + o
Remote Types x x o
Remote Call Interface x x o
Некатегоризованный x x o

Где:

  1. + - является
  2. x - при явном наличии в спецификации директивы компилятора pragma Preelaborate является предэлаборируемым, при отсутствии - не является.
  3. o - допустимо

Описание запросов

Запрос определения принадлежности модуля категории Declared Pure. Основанием для принадлежности модуля этой категории является наличие в его спецификации директивы компилятора pragma Pure.

       function Is_Declared_Pure
        (The_Compilation_Unit : in ASIS.Compilation_Unit)
           return Boolean;

Запрос определения принадлежности модуля категории Shared Passive. Основанием для принадлежности модуля этой категории является наличие в его спецификации директивы компилятора pragma Shared_Passive.

       function Is_Shared_Passive
        (The_Compilation_Unit : in ASIS.Compilation_Unit)
           return Boolean;

Запрос определения принадлежности модуля категории Remote_Types. Основанием для принадлежности модуля этой категории является наличие в его спецификации директивы компилятора pragma Remote_Types.

       function Is_Remote_Types
        (The_Compilation_Unit : in ASIS.Compilation_Unit)
           return Boolean;

Запрос определения принадлежности модуля категории Remote Call Interface. Основанием для принадлежности модуля этой категории является наличие в его спецификации директивы компилятора pragma Remote_Call_Interface.

       function Is_Remote_Call_Interface
        (The_Compilation_Unit : in ASIS.Compilation_Unit)
           return Boolean;

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

       function Is_Categorized_Library_Unit
        (The_Compilation_Unit : in ASIS.Compilation_Unit)
           return Boolean;

Запрос определения принадлежности модуля к категории предэлаборируемых. Основанием для принадлежности модуля этой категории является наличие в его спецификации одной из директив компилятора pragma Pure, pragma Preelaborate, pragma Shared_Passive.

       function Is_Preelaborated
        (The_Compilation_Unit : in ASIS.Compilation_Unit)
           return Boolean;

Запрос явной принадлежности модуля категории предэлаборируемых. Основанием для принадлежности модуля этой категории является наличие в его спецификации директивы компилятора pragma Preelaborate.

       function Is_Declared_Preelaborate
        (The_Compilation_Unit : in ASIS.Compilation_Unit)
           return Boolean;

Вадим Годунко. Май 2003г.