Ада-95. Компилятор GNAT



       Майл видеочат ру. | tece инсталляция для унитаза |   

Управление порядком элаборации


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

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

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

Однако, при разработке больших систем, такое вмешательство бывает необходимым.

Во-первых, существует несколько способов указать компилятору, что данный модуль потенциально не содержит никаких проблем связанных с элаборацией:

Пакеты, которые не требуют наличия тела.

Ада не допускает наличие тела для библиотечного пакета, который не требует наличия тела.

Это подразумевает, что можно иметь пакет подобный следующему:

package Definitions is

generic

type m is new integer; package Subp is

type a is array (1 .. 10) of m; type b is array (1 .. 20) of m; end Subp; end Definitions;

В данном случае, пакет, который указывает в спецификаторе with пакет Definitions, может безопасно конкретизировать пакет Definitions.Subp

поскольку компилятор способен определить очевидное отсутствие тела

Директива компилятора pragma Pure

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

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

Директива компилятора pragma Preelaborate

Данная директива накладывает несколько менее строгие ограничения на модуль чем директива Pure.

Однако эти ограничения остаются достаточно значительными, чтобы гарантировать отсутствие проблем при вызове подпрограмм модуля.

Директива компилятора pragma Elaborate_Body




Содержание  Назад  Вперед