Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 56
Текст из файла (страница 56)
Другим значительным конструкторским решением является взаимосвязь имен и специальных слов, которыми могут быть зарезервированные или ключевые слова. Охарактеризовать переменные можно шестеркой атрибутов; именем, адресом, значением, типом. временем жизни и областью видимости. Альтернативными именами называются имена, связанные с одним адресом памяти. С точки зрения належности оии расцениваются как вредные, но полностью исключить нх из языка трудно.
Связывание — это установление связи между программными объектами и их атрибутами. Знание момента времени. когда происходит связывание атрибутов с объектами, необходимо лля понимания семантики языков программирования. Связывание может быть статическим или динамическим. Объявления, явные или неявные, обеспечивают срелства статического связывания переменной с типом. Динамическое связывание, в обшем случае, придает языку большую гибкость за счет ухудшения читабельности. эффективности и надежности программ. написанных на нем.
Скалярные переменные можно разделить на четыре категории по времени их жизни: статические. автоматические, явные динамические и неявные динамические переменные. Строгая типизация означает необходилюсть обнаружения всех ошибок определения типа. Результатож строгой типизации является повышенная належность. Правила совместимости типов в языке оказывают значительное влияние на выполняемые операции над величинами. Совместимость типов определяется.
как правило, в терминах совместимости имен или структур типов. 203 Резюме Статический обзор данных является основным свойством языка А1.001. 60 и большинства его потомков. Он предлагает эффективный метод разрешения видимости нелокальных переменных полпрограмм. Динамический обзор данных обеспечивает большую по сравнению со статическим обзором гибкость, но, опять-таки, за счет ухудшения читабельности, эффективности и належности программ.
Среда ссылок оператора является совокупностью всех его переменных, видимых данным оператором. Именованные константы — это простые переменные. связываемые со своим значением только в момент их связывания с ячейкой памяти. Инициализация — это связывание переменной со своим значением во время ее связывания с ячейкой памяти. Р: -2г 1. Какие вопросы разработки языков программирования связаны с именами? 2. В чем состоит потенциальная опасность имен, зависящих от регистра? 3.
Чем зарезервированные слова лучше ключевых? 4. Что такое альтернативное имя? 5. Какие категории ссылок в языке С++ всегда имеют альтернативные имена? 6. Что такое левое значение переменной? Что такое правое значение переменной? 7. Дайте определение связывания и времени связывания. 8. Какие четыре варианта времени связывания есть в программе после разработки языка и его реализации? 9. Дайте определение статического и дипачического связывания. 10. Назовите достоинства и недостатки неявных обьявлений. 11.
Назовите достоинства н недостатки динамического связывания типов. 12. Дайте определение стапгических переменных, автоматических перанеииых, явных и неявных динамических переменных. 13. Дайте определение приведения типов, оизибки определения типов, проверки типов и строгой типизаиии. 14. Дайте определение совместимости имен типов и совместимости структур типов. Какое полезное свойство объединяет эти два понятия? 15. Чем различаются производные типы языка Ада и полтины того же языка? 16. Дайте определение времени згсизии, области видимости, статического и динамического обзора данных.
17. Каким образом обрашение к нелокальной переменной в программе со статическим обзором данных связано с ее опрелелением? 18. Назовите основную проблему, возникаюшую при статическом обзоре данных. 19. Что такое "среда ссылок оператора"? 20. Что является статическим предком подпрограммы? Что является динамическим предком подпрограммы? 21. Что такое "блок" ? 206 Глава 4. Имено, связывание, проверка типов н области видимости 22.
23. Назовите достоинства и недостатки линамического обзора данных. В чем заключаются достоинства именованных констант". Определите, какая из следуюших форм идентификаторов является самой чита- бельной. Аргументируйте ваше решение. ЯимОЙЯа1ев вив о1 ва1ев 5))ИОГЯАЬЕЯ Одним из распространенных использований оператора ЕО))1ЧАЬЕНСЕ языка ГО)П'йА)ч является следуюшее. Большой массив числовых величин доступен подпро~рамме как параметр. Массив содержит множество различных не связанных между собой переменных, а не совокупность повторений одной и той же переменной. Данные представляются в виде массива для уменьшения числа имен, которые требуется передать как параметры. Вне подпрограммы длинный оператор ЕО))1НАЬЕ))СЕ используется лля создания дополнительных имен в качестве альтернативных имен различных злементов массива, что повышает читабельность команд подпрограммы.
Хороша ли эта идея? Какие сушествуют альтернативы использованию совмешения имен? 3. Напишите простой оператор присваивания с одним арифметическим оператором из какого-нибудь известного вам языка. Для каждого компонента оператора перечислите различные связывания, требуемые для определения его семантики при выполнении. Для кажлого связывания укажите используемые в языке времена связывания. Объясните взаимосвязь динамического связывания типов с неявными динамиче- скими переменными. Опишите ситуацию, в которой могут оказаться полезными переменные, зависящие от предыстории. Рассмотрите слелузошую скелетную программу на языке Рааса): ргодгае вадпг маг х : Ьпседег; ргосес)иге виЬЗ; йогиаге)Г ргосес)иге виЬ1; чаг х: 1пседегг ргосес)иге виЬ2; Ьедяп ( виЬ2 ) сН ) Ь2) Ьеддп ) виЬ1 ) )г ) виЬ1 ) 201 Упражнения В некоторых языках определение типов не предусмотрено.
Назовите очевидные достоинства и недостатки таких языков. ргоаасЬлка яцЬЗ; Ьадлп ( яцЬЗ ) а;( ЬЗ) Ьадлп ( жало ) апс(. ( амадо ) Предположим, что выполнение программы осуществляется следующим образом: процедура зла л п вызывает процедуру я цЬ1; процедура яцЬ1 вызывает процедуру яцЬ2; процедура яцЬ2 вызывает процедуру яиЬЗ г 7.1. Если предположить, что используется статический обзор данных, какое из объявлений переменнод х будет справедливо для следующих обращений к переменной х? 7.1.1. В процедуре яиЬ1.
7.1.2. В процедуре яиЬ2. 7.1.3. В процедуре яцЬ3. 7.2. Повторите задание пункта 7.1, предполагая использование динамического обзора данных. 8, Предположим, что следующая программа была откомпилирована и выполнена с использованием правил статического обзора данных. Какое значение переменной х выводится на экран в процедуре яцЬ1? Каким бы было зто значение при использовании правил динамического обзора? ргодгаа та1п; час х : лпкадвг; ргоаасцлге яцЬ1; Ьадлп ( яцЬ1 нггсе1п('х =', х) апс1; ( яцЬ1 ) ргооааига яиЬ21 чая х : дпкадак; Ьадлп ( яцЬ2 ) х:= 10; яОЬ1 апс1; ( яиЬ2 Ьадлп ( гаа1п х:= 51 яцЬ2 апс1.
(тала) 9. Рассмотрите слелуюшую программу: ргодгаа вадп; час х, у, г : лпгедег; ркоаас(цга яцЬ1; чаг а, у, г : 1пгедег; 208 Глава 4. Имена, связывание, проверка типов и области видимости ргосвйиге яиЬ2; чаг а, Ь, г : 1пседег; Ьедап ( яиЬ2 ) епс1; ( яиЬ2 Ьвдлп ( яиЬ1 ) аг ( Ь1 ] ргосеФзге яиЬЗ; чаг а, х, н : 1ггеаег; Ьедап ( 5иЬЗ ) впе$1 ( яиЬЗ ] Ьедхп ( гкадп ) еп6. (падл) Предполагая использование статического обзора данных, перечислите все переменные.
видимые в телах процедур яиЬ1, яиЬ2 и яиЬЗ, вместе с программными единицами, в которых они объявляются. 10. Рассмотрите следуюшую программу: ргодгаа мауп; чаг х, у, г: 1пгедегг ргосвс(иге яиЬ1; чаг а, у, г : 1пгедег; Ьедз.п ( яиЬ1 ) епйг ( яиЬ1 ) ргосвс(иге яиЬ2; чаг а, х, н : 1пгедег) ргосвгЗиге яиЬЗг чаг а, Ь, г : 1пседег; Ьед1п ( яиЬЗ ) взм11 ( яиЬЗ ) Ьвдхп ( яиЬ2 ) вп<й; ( 5иЬ2 ) Ьвд1п ( тауп ) епс1.
(паул) Прелполагая использование статического обзора. перечислите все переменные. видимые в телах процедур яиЬ1. яиЬ2 и яиЬЗ, вместе с программными единицами, в которых они обьявляются. 11. Рассмотрите следуюшую программу на языке бд чо1с( йип (чей) дпк а, Ь, с; /* определение 1 */ 209 Упражнения ииз.1е (...) ( дпе Ь, с, аг < иих1е (.. ) ( дпе с, г), е /* определение 2 */ /* определение 3 */ ------------ ††----4 < Для каждой из четырех отмеченных точек приведенной функции перечислите все видимые переменные и укажите количество операторов, определяюших зтн пере- менные. 12. Рассмотрите следующую скелетную программу на языке С: чойс( Енп1(чой4()г /*прототип*/ чоас( тнп1(чойс()г /*прототип*/ чово йнп1(чола)г /*прототип*/ чо1<( ваап()г ( дпе а, Ь, с; ) чоЫ Гнп1 (чоЫ) ( 1пк Ь, с, г)г чоЫ йип2 (чоас() ( з.пс с, с), е; чоха ЕипЗ (чоЫ) ( дпе с(, е, 12.3.
Функция вайп вызывает функцию гнп2; функшяя йнп2 вызывает функцию гнпЗ; функция йнпЗ вызывает функцию йнп1. 12.4. Функция ваап вызывает функцию ГнпЗ; функния йнпЗ вызывает функцию Е оп 1. 240 Глава 4. Имена, связывание, проверка типов и области видимости Предполагая использование динамического обзора данных, рассмотрите следующие последовательности вызовов и укажите, какие переменные видимы во время выполнения последней вызванной функции. Для каждой видимой переменной укажите имя функции, определяющей данную переменную. 12.1. Функция ва1п вызывает функнию Гип1; функция йнп1 вызывает функцию йнп2; функция гнп2 вызывает функнию йнпЗ.
12.2. Функция вадп вызывает функцию 1ип1; функция гнп1 вызывает функнию йипЗ. 12.5. Функция вазп вызывает функцию йцп1; функция бцп1 вызывает функцию 1ипЗ; функция гипЗ вызывает функцию бцп2. 12.6. Функция па1п вызывает функцию бцпЗ: функция йцпЗ вызывает функцию йип2; функция Ьцп2 вызывает функцию бцп1. 13. Рассмотрите слелуюшую программу: ргосгаа гаа1п; чаг х, у, х : 1пСеаег; ргссвс(цге вцЬ11 чаг а, у, з : 1пкедегг Ьвяхп ( 5ОЬ1 ) впс(г ( аиЬ1 ) ргосеспгв яцЬ2; чаг а, Ь, г : 1пседегг Ьейз.п ( 50Ь2 впс1; ( виЬ2 ) ргссес(иге виЬЗ( чаг а, х, н : 1пСецегг Ьесхп ( яиЬЗ ) епс1; ( яиЬЗ Ьесап ( аа1п ) впс(. (гаазп) Предполагая использование динамического обзора данных, рассмотрите следуюшие последовательности вызовов и укажите, какие переменные видимы во время активации последней подпрограммы. Для каждой видимой переменной укаьтите нмя блока, в котором объявляется данная переменная.