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



         

Управление порядком элаборации - часть 4


Такие случаи будут рассмотренны несколько позже.

Суть правила проста.

Если модуль содержит код элаборации, который может прямо или косвенно осуществить вызов подпрограммы модуля указанного в спецификаторе with, или конкретизировать настраиваемый модуль расположенный внутри модуля указанного в спецификаторе with, то в случае, когда модуль, который указан в спецификаторе with, не содержит директиву Pure, Preelaborate или Elaborate_Body, клиент должен указывать директиву Elaborate_All для модуля, который указан в спецификаторе with.

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

Если это правило не соблюдается, то программа может попасть в одно из четырех состояний:

Правильный порядок элаборации отсутствует:

Отсутствует порядок элаборации, который соблюдает правила учитывающие использование любой из директив Pure, Preelaborate или Elaborate_Body.

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

Порядок элаборации, один или более, существует, но все варианты не правильны:

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

Существует несколько вариантов порядка элаборации, некоторые правильны, некоторые - нет:

Подразумевается, что программист не управляет порядком элаборации.

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

во время выполнения.

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

Порядок элаборации, один или более, существует, все варианты правильны:

В этом случае программа выполняется успешно.




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