Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 138

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 132 133 134 135 136 137 < 138 > 139 140 141 142 143 144 .. 316 >> Следующая

KPROG, KQ,
которая совпадает со статической цепочкой тела процедур Q, образованной путем погру ения в контекст. KQ вкл чает в себя имена процедур Q1 и Q2, доступных для вызова в теле Q. Вызов Q2 (строка 21) приводит к образованию динамической цепочки
8.4.
395
KPROG, KQ, KQ2,
которая опять совпадает со статической цепочкой тела процедуры Q2. Вызов Q1 в строке 18 правомерен, он приводит к динамической цепочке
KPROG, KQ, KQ2, KQ1,
которая не совпадает со статической цепочкой тела процедуры Q1 :
KPROG, KQ, KQ1
(локальные данные из KQ2 не доступны!). В Q1 вызывается процедура P (строка 13), в результате в момент вполнения этого взова динамическая цепочка подпрограмм примет вид
KPROG, KQ, KQ2, KQ1, KP.
Статическая цепочка, регламентируая доступ к данным в теле процедур P, строка 4, есть
KPROG,
Статическая и динамическая цепочки при исполнении строки 25, не содер-аей взова подпрограмм, состоят из контекста основной программы. Когда исполняется вызов процедуры P в строке 26, статическая и динамическая цепочки принимают вид
KPROG, KP.
При возврате из процедуры из них удаляется имя KP, а при выходе из всей программ обе цепочки ликвидиру тся.
риведенная иллстрация показывает, что статические цепочки доступа к данным оказыва тся фрагментами динамических цепочек. чевидно, что это свойство выполняется для любых вызовов процедур.
Семантика вызова процедур, представленная вые, восходит к модели вычислений Algol 60; в Pascal, как и во многих других развитых языках программирования, с точность до различий в локализации имен (которая к в -зову имеет косвенное отноение), она воспроизведена без изменений.
Как уже отмечалось, потребность в статических цепочках возникает, когда язк допускает вло енне описания процедур с правилами локализации имен, которые приведены выше на примере Pascal. Реализация такой воз-мо ности требует, чтоб в процессе выполнения программы в памяти сохранялись обе цепочки: одна для адресации даннх, связанной с динамической вложенностью, а другая — со статической вложенностью. Это обстоятельство не очень привлекательно для разработчиков языков и трансляторов, а потому зачасту они ертву т возмо ность статической локализации имен (обчно путем запрета вло енных описаний процедур, ре е — изменением правил локализации) в пользу повения эффективности рабочих программ. Характерным примером такого рода является язык С/С++.
396
ГЛАВА 8. ПОДПРОГРАММЫ
8.4.3. Понятие экземпляра процедуры
При обсуждении процедур важно иметь ввиду следующие момента. Во-первых, каждое обращение к алгоритму процедуры — это запуск вычислений самостоятельного процесса, который приостанавливает породивий его процесс. В частности, рекурсивное обращение к алгоритму порождает новый экземпляр работающего в данный момент или приостановленного процесса. Как следствие, порождается новый комплект локальных данных процесса ее до окончания текуего процесса. Во-вторых, заверение вчислений процесса процедуры возвраает вычисления в целом к той точке программ , в которой вычисления были приостановлены для обращения к процедуре — это свойство обращения к любому вспомогательному алгоритму.
Таким образом, имеет смысл говорить об экземплярах процедур и функций, существующих одновременно9. Эти экземпляры обладают следующими свойствами.
a) экземпляр характеризуется своим комплектом локальных данных иточ-кой возвра а;
b) поро дение экземпляра — это создание его комплекта локальнх данных, запоминание точки возврата и передача управления на начало программы алгоритма;
c) заверение экземпляра — это уничто ение его комплекта локальнх данных и передача управления в точку возврата, а для функций, вдобавок, передача результата вчислений в вызвавее выра ение для продол ения его вычисления;
d) из всех экземпляров рекурсивной процедуры или функции выделяется ак-
ивный экземпляр, который непосредственно выполняется в даннй момент вычислений, все остальне экземпляр пассивны в том смсле, что они о ида т продол ения своего выполнения после заверения активного экземпляра;
9 В литературе часто можно встретить термин активация процедуры, смыл которого в точности соответствует тому, что здесь названо экземпляром. Термин восходит к операционному взгляду на процедуру: когда при вычислении вызывается процедура, это приводит к активизации операторов ее тела, но при этом не прекращаются, а лишь приостанавливаются другие начатые действия. Таким образом, становятся активированными сразу несколько вычислительных процессов.
8.4.
397
e) порождение и завершение экземпляров строго соответствует стековой дисциплине: "первым порожден — последним завершен".
Возмо ности, соответствуие механизму рекурсивного взова, у наего абстрактного вычислителя име тся: это запоминание всего локального контекста на стеке и порождение нового контекста, которое можно трактовать как поро дение нового экземпляра рекурсивно запускаемой подпрограмм .
Возмо ность одновременного суествования нескольких экземпляров одной и той е процедур или функции в динамике выполнения программы, при условии выполнения только что перечисленных требований, мо но рассматривать в качестве определения рекурсивности этой процедуры или функции.
Предыдущая << 1 .. 132 133 134 135 136 137 < 138 > 139 140 141 142 143 144 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100