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

       

Инструкции, выражения и элаборация


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

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

Кроме того, во время выполнения программы происходит вычисление различных имен, которые указывают на соответствующие объекты (содержащие какие-либо значения) или другие сущности (такие как подпрограммы и типы).

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

Например, тело процедуры может иметь следующий вид:

procedure P( ... ) is

I: Integer := 1; -- описательная часть . . . begin

. . . -- последовательность инструкций I := I * 2; . . . end P;

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

Последовательность элаборации описаний определяется порядком их следования в описательной части.

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

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

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

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

Инструкция присваивания позволяет заменить значение переменной результатом вычисления выражения того же самого типа.

Обычно, присваивание осуществляется простым побитовым копированием значения, которое получено в результате вычисления выражения.

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




Инструкции case и if

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

Инструкция loop

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

Инструкция goto

осуществляет передачу управления в место отмеченное соответствующей меткой.

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

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

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

Результатом вычисления любого выражения является значение.

Каждое выражение имеет определенный тип, который известен на этапе компиляции.

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

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

Например, в общем случае вся информация об описании известна во время компиляции, следовательно, элаборация во время выполнения программы не потребует выполнения какого-либо машинного кода.

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


Содержание раздела