Нелокальная ссылка - Большая Энциклопедия Нефти и Газа, статья, страница 1
Если вы считаете, что никому до вас нет дела, попробуйте пропустить парочку платежей за квартиру. Законы Мерфи (еще...)

Нелокальная ссылка

Cтраница 1


Нелокальные ссылки в рекурсивных подпрограммах не вызывают никаких особых проблем при любом из трех подходов к нелокальным средам. Каждый подход немедленно распространяется на случай рекурсии. При явно описываемой нелокальной среде X является глобальным и, следовательно, существует только в одной активации. В методе статической блочной структуры при обработке ссылки на X ассоциация для X будет выбираться из наиболее поздней активации подпрограммы, в которой описан X. В методе последней ассоциации нужная ассоциация будет, конечно, выбираться из последней активации в цепи вызовов.  [1]

Нелокальные ссылки обычно основываются на статической блочной структуре программы. Однако программист может воспользоваться и другим методом: включив в описание идентификатора атрибут EXTERNAL ( внешний), можно ввести этот идентификатор и его ассоциацию в глобальную среду ссылок. Во время выполнения все ссылки на этот идентификатор в любой из подпрограмм извлекают одну и ту же глобальную ассоциацию. Атрибут EXTERNAL используется в основном для разделения данных между отдельно скомпилированными подпрограммами; в этом случае он играет по существу ту же самую роль, что и инструкция - COMMON в Фортране. Для идентификаторов, описанных с помощью EXTERNAL, глобальная среда ссылок может быть создана во время загрузки, до начала выполнения программы.  [2]

3 Стек таблиц среды при выполнении Р (. [3]

Нелокальные ссылки, однако, приводят к сложным задачам. Рассмотрим вновь рис. 6.8. На рис. 6.9 показано содержимое стека в момент, когда в процессе выполнения при первом вызове Р мы подошли к присваиванию X: X У. Обратите внимание на трудность нахождения подходящей ассоциации для У, поскольку подходящей является не та ассоциация, которая была создана позднее всего. Теперь уже недостаточно просто просмотреть стек сверху вниз. Проблема заключается в том, что последовательность локальных таблиц в стеке представляет динамическую вложенность активаций подпрограмм, вложенность, основанную на цепи вызовов во время выполнения. Но теперь нелокальную среду определяет статическая вложенность определений подпрограмм, а стек, как мы его сейчас построили, не содержит информацию о статической вложенности.  [4]

Для нелокальных ссылок главным образом применяется правило самой последней ассоциации, реализованное с помощью простого связанного списка текущих ассоциаций, А-списка; при каждой ссылке на некоторый идентификатор его текущая ассоциация ищется в этом списке. Однако имеется некоторое число обходных путей, позволяющих заменить этот простой, но медленный метод более быстрыми. Наиболее важной является возможность дать любому идентификатору глобальную ассоциацию, называемую APVAL, имеющую приоритет по отношению к любой другой ассоциации для данного идентификатора.  [5]

В подпрограммах нелокальные ссылки управляются правилом последней ассоциации, но с некоторой особенностью.  [6]

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

8 Форматы таблиц локальной среды для программы, приведенной на. [8]

Алголе обработка нелокальных ссылок управляется статической блочной структурой.  [9]

Трудность, вызываемая нелокальными ссылками в параметре-подпрограмме, состоит в следующем: когда ссылка на формальный параметр приводит к выполнению подпрограммы-фактического параметра, среда ссылок, нужная для. Вместо нее обычно необходимо создать некоторую другую нелокальную среду ссылок специально для выполнения подпрограммы-параметра. Если нелокальные среды описываются явно ( как в Фортране), то никаких трудностей не возникает, поскольку все нелокальные ссылки обычно являются глобальными и, таким образом, не зависят от точки вызова или передачи. Однако если используются неявные нелокальные среды, то восстановление подходящей нелокальной среды в момент вызова может быть довольно сложной задачей.  [10]

Однако если подпрограмма содержит нелокальные ссылки, то описание нелокальной среды ссылок является важным моментом.  [11]

Необходимость прохождения статической цепи для каждой нелокальной ссылки является недостатком приведенного метода.  [12]

Нет принципиальных трудностей и при обработке нелокальных ссылок, однако могут возникнуть проблемы с управлением памятью. Предположим, что Р вызывает Q как отдельную параллельно выполняемую задачу.  [13]

К такому языку, как Алгол, в котором обработка нелокальных ссылок основана на статической блочной структуре, метод центральной таблицы среды ссылок из разд. Лисп или Снобол 4, в которых для обработки нелокальных ссылок применяется правило последней ассоциации.  [14]

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



Страницы:      1    2    3    4