Главная » Просмотр файлов » Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)

Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 124

Файл №1160801 Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)) 124 страницаТ. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801) страница 1242019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 124)

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

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

Таким образом, если бы каждый блок из листинга 9.11 представлял собой некоторую процедуру, могло бы случиться, что блок, содержаший ~, и блок, содержа- 9.5. Рекомендуемая литература 451 ший а, выполнялись бы одиовремеиио (например, блок, содержаший ~, вызывает блок, содержащий /а).

Поэтому для таких блоков потребовались бы отдельные за- писи активации. Листинг 9.11. Локальные объявления в С геа1 ргос1( парахетры ) (1пт ъа, /* операторы */ (1пт х. 1: . ,/* операторы */ ) (тпс в, и: /* операторы */ /* операторы */ ) /* операторы* / ) (1пт х (1пт у; ) ) Но в рассматриваемом примере иа С такая ситуация невозможна. Если мы иаходимся внутри блока, содержащего переменную ~, мы ие можем находиться в области видимости переменной аг Аналогично, если мы находимся в области видимости х, мы ие можем находиться в области видимости у, Это позволяет применить простую стратегию распределения памяти, аналогичную той, которая применяется для структур хранения вариантных записей (см.

рис. 6.9). Для храиеиия перемеииых й и 1 можно использовать те же области памяти, что и для переменных /и и и, поскольку оии никогда ие будут активизированы одновременно и все зти области расположены в области памяти, выделяемой для содержащей блоки операторов процедуры. Локальные объявления нужны только для того, чтобы определить область видимости (миожество операторов), где каждая переменная может использоваться.

Память вылеляется для активации подпрограммы в целом. Структура записи активации, куда входят и оп исаи иые блоки, проиллюстрировала иа рис. 9.15. Адресуемая область памяти ы Адресуемая область памяти ы+1 Адресуемая область памяти ы+2 Адресуемая область памяти ы+3 Адресуемая область памяти ы+4 Объекты данных, совместно использующие /-значеиие одной и той же адресуемой области памяти Рис. 9.15. Совмещение областей памяти для переменных в записи активации 9.5. Рекомендуемая литература Большую часть упоминаемых в главе 1 книг и статей, которые посвящены структурам управления подпрограммами, можно порекомендовать и для изучения таких смежных проблем, как среды ссылок, совместно используемые данные и параметры. Тексты главы 3, посвященные написанию трансляторов, описывают, как компилировать такие структуры.

452 Глава 9. Управление подпрограммами 9.6. Задачи и упражнения Когда среды локальных ссылок удаляются между активациями подпрограмм с помощью центрального стека, как, например, в языке С, иногда кажется, будто значения локальных переменных сохраняются. Например, в болыпинстве реализаций языка С, если в подпрограмме 5сб имеется локальная переменная Х и при первом вызове подпрограммы ей присваивается значение 5, тогда при втором вызове, если (случайно) сослаться на переменную Х до того, как ей будет присвоено новое значение, то Х может в этот момент по-прежнему иметь значение 5. Однако в той же самой программе при третьем вызове 5н0 можно обнаружить, что переменная Х не сохранила значения, присвоенного ей во время второго вызова. а) Объясните эту кажущуюся аномалию: при каких обстоятельствах активация подпрограммы 5н0, в которой есть ссылка на неинициализированную переменную Х, может обнаружить, что Х имеет прежнее значение, присвоенное ей во время предыдущего вызова подпрограммы 5о0? При каких обстоятельствах значение переменной Х, присвоенное ей в предыдущем вызове подпрограммы, не сохранится? б) Напишите простую программу на С и проследите за этими эффектами при ее выполнении в вашей локальной реализации языка.

Предположим, что некоторый язык позволяет при объявлении локальных переменных задавать их начальные значения, как, например, в следующем объявлении на языке Ада: Х: 1лтедег := 50 которое инициализирует переменную Х, присваивая ей значение 50. Объ- ясните два значения, которые может иметь эта инициализация в случаях; а) если локальные переменные сохраняются в промежутках между обращениями к подпрограмме; б) если локальные перемеинхяе уничтожаются между вызовами подпрограмм. В Рааса! (и многих других языках) допускается использовать указатели (пе- ременные типа ро1 лсег) совместно с операцией лен для создания новых объек- тов данных. Среда локальных ссылок в Рааса! уничтожается в промежутках между вызовами подпрограмм.

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

9.6. Задачи и упражнения 453 Затем решите обратную задачу: для имени, объявленмого в каждой из этих сред ссылок, перечислите: а) определения подпрограмм в его статической области видимости; б) активации подпрограмм в его динамической области видимости. 5. При разработке подпрограмм часто бывает трудно обеспечить сокрытие ин- формации, если в языке не допускается сохранение локальных данных между вызовами подпрограмм (как, например, в Рааса!). Приведите пример ситуации в языке Разса1, когда удаление локальных сред приводит к необходимости сделать объект данных видимым за пределами подпрограммы, хотя доступ к этому обьекту данных мужем только для этой подпрограммы.

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

Например, пусть А, В, С и 0 — подпрограммы главной программы Иаэп и А вызывается из Маэп. Предположим, что А вызывает В, В рекурсивно вызывает А, Я вызывает С и затем С вызывает 0 а) Если в 0 имеется нелокальная ссылка ма переменную Х из А, то которая «переменная Х» будет видимой в 0 — из первой активации А илн второй? б) При сделанных предположениях относительно вызовов подпрограмм н разрешения пелокальных ссылок возможно только четыре различных варианта статической вложенности определений подпрограмм А, В, С и О.

Изобразите эти четыре варианта (например, так, как это сделано на рис. 9.4). в) Для каждого нз этих четырех вариантов статической вложенности изобразите стек времени выполнения в тот момент, когда подпрограмма 0 ссылается ма имя Х, показав в мем записи активации для подпрограмм А, В, С и О, а также статические и динамические цепи. Для каждого случая дайте представление Х в виде пары (и, в) и объясните, какой объект данных Х мы должны получить с помощью нелокальной ссылки Х в подпрограмме 0 в данной структуре времени выполнения.

Предполагается, что разрешение нелокальмых ссылок реализовано с использованием указателей статической цели. 8. Предположим, что вы хотите модифицировать Разса1 таким образом, чтобы разрешение нелокальных ссылок основывалось иа динамической области видимости (тоесть использовалось бы правило последней ассоциации), а нс статической (как это происходит на самом деле). а) Как следовало бы модифицировать организацию центрального стека времени выполнения? Какую информацию можно было бы удалить из каждой записи активации каждой подпрограммы? Какую информацию надо было бы добавить в каждую запись активации? Глава 9.

Управление подпрограммами б) Объясните, как в этой модифицированной реализации языка разрешались бы нелокальные ссылки. в) Приведите два примера проверки ошибок, которые пришлось бы делать во время выполнения программы (которые могли бы быть сделаны во время компиляции, если бы использовались правила статической области видимости). 9. Предположим, что вы хотите разработать язык, в котором: а) допускается сохранение локальных сред; б) не допускается рекурсивный вызов подпрограмм; в) нелокальные ссылки определяются при помощи правил динамической области видимости, Спроектируйте реализацию такого языка.

Объясните, как в нем представлена среда ссылок. Объясните, какие действия совершаются при входе и выходе из подпрограмм. Объясните, как реализовано разрешение нелокальных ссылок. 10. Объясните, почему на языке, подобном А) 601, где параметры передаются только по значению или по имени, невозможно написать подпрограмму 5иар с двумя параметрами, которая просто меняет местами значения этих двух параметров (параметры могут быть простыми переменными или переменными с индексами). Например, если эта подпрограмма была вызвана как 5нар(Х. '1'), то после ее завершения переменная Х должна иметь значение, равное исходному значению у, а переменная 1' — значение, равное исходному значению Х.

Предполагается, что подпрограмма 5иар работает только с целочисленными параметрами. 11. Рассмотрим следующую программу: ргодгев Ма1п1 ..). чаг Ч. 1пгедег, госееоге Р(Х: Штедег): Ьед1п Х ;- Х + ); ег)те 1Х, Ч) епо': Ьед)п Ч ;= ), Р1Ч), егтсте1Ч) еп6. Напишите три числа, которые будут напечатаны в результате выполнения этой программы, если У передается в подпрограмму Р: а) по значению; б) по ссылке; в) позначению-результату; г) по имени. 12.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее