Пояснения к используемой терминологии

 

Активация подпрограммы создается при каждом вызове этой подпрограммы.

Под записью активации подпрограммы в рамках данного документа будем понимать таблицу локальных имен подпрограммы.

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

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

Псевдонимы – два или более имен для одного и того же объекта данных. В рамках данной работы следует обнаружить возможность использования псевдонимов в двух случаях:

- подпрограмма может иметь доступ к объекту данных, переданному как фактический параметр по ссылке, через нелокальное имя;

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