Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 18
Текст из файла (страница 18)
Когда выходит стандарт языка(обычпо каждые 5 — 10 лет), сильное влияние на составление нового стандарта оказывает требование совместимости бо- 62 Глава 1. Проблемы разработки языка лес старых программ с реализациями новых версий.
Таким образом, прп составлении стандарта имеет место некоторое внешнее давление на разработчиков, вынуждающее их включать предыдущую версию в новый стандарт. Для нескольких стандартных определений языков Аг!а, СОВО! и РОВТВАЕч! сравните языковые конструкции и перечислите наиболее слабые из них (с вашей точки зрения), наличие которых в данной версии языка объясняется только требованием совместимости с предыдущими версиями. 4. Рассмотритс следующий простой язык. Символы а и Ь являются пменамп целых переменных.
Каждый оператор может иметь прсфпксную метку. Определены следующие операции; Присваивает переменной а значение переменной Ь Прибавляет 1 к значению переменной а Вычитает 1 из значения переменной а Если а = О, управление передается оператору с меткой С Если а > О, управление передается оператору с меткой Ь Передает управление оператору с меткой С Завершает выполнение программы в=ач1 в=а-1 Г а =О твен ОС1с Г Г а >С Ььеп Осгс Ь Чсго Ь ьа',т Е!апрнмер, программа, вычисляющая а=а+Ь, может быть записана следующим образом: Ь; а-.а+1 Ь=Ь-1 ~Г 'ьяс 1геп ЧЬ1с Ь Ьмт а) Напишите на этом языке следующие программы: 1) дано а и Ь, вычислить х = а + Ь; 2) дано а н Ь,вычислить х = а х Ь; 3) ланоа, Ь,с иб,вычислитьх = з х Ьиу = с х О, б) Обсудите минимальный набор расширений для того, чтобы этот язык было легко использовать.
Рассмотрите такие концепции, как подпрограммы, новые операторы, объявления и т, л. 5. Возьмите какую-нибудь программу, написанную вами на императивном языке (например, РОДСТВА!ч1, С или Рааса!), и перепишите ее так, чтобы она стала аппликативпой. 6. Возможности языка С позволяют описать некоторое действие несколькими разными способамп. Сколько различных операторов вы можете написать на С, чтобы прибавить 1 к переменной х (эквивалентных оператору х=хя1)? Выясните преимущества и недостатки этого аспекта языка С. 7. Описанный в конце разлела 1.4.1 оператор аззегс может быть реализован или как тест, используемый во время выполнения программы и выполняемый всякий раз, котла в программе доходит очередь Ло этого оператора, илп как некоторое свойство, лля которого следует осуп1сствить проверку на истинность в атой точке программы.
1.7. Задачи и упражнения БЗ а) Обсудите, как можно реализовать каждый из этих подходов. Какие сложности могут возникнуть при реализации каждого из подходов? б) Когда условное выражение оператора азэег~ будет всегда истинно для каждого метода реализации? 8. Первые компьютеры были сконструированы как электронные калькуляторы для решения численных задач. Подумайте, как бы могли выглядеть языки программирования, если бы первые компьютеры создавались для разных конкретных целей (например, для обработки текстов, управления роботами, игр).
9. Представьте себе, что некоторый новый язык поддерживает трн основных типа данных: целые (тгвйег), вещественные (геа!) и привольные (снагасгвг). Также он позволяет объявлять массивы (апау) и записи (гесогг() данных. Элементы массивов должны быть одного типа, а записи могут состоять нз элементов различных типов, Используйте понятие ортогональности для сравнительного анализа слелующнх двух новых вариантов этого языка: а) Элементы массивов н записей могут быть одного нз трех основных типов данных и также могут быть массивами или записями (например, элемент записи может быть массивом). б) Элементы массивов и записей могут быть вещественными (гва)) или целыяи (тгейег).
Массивы символов называются строками (вгпня) и обрабатываются специальным образом. Элементы записей могут быть символьного типа и массивами, но записи не могут быть элементами массивов. Массивы не могут быть элементами массивов, но можно использовать многомерные массивгв для достижения того же результата. Глава 2. Влияние машинной архитектуры Как описано в разделе 1.2, рагпгис языки программирования разрабатывались так, чтобы написанные на них программы могли эффективно работать на дорогостоящих вычислительных машинах.
Поэтому программы, написанные на ранних языках (таких как ВОВТКАХ, прелназначенный лля численных расчетов, или 1.1ЯР, работающий со списками), транслировались в эффективный машинный код, даже если писать их было достаточно сложно. Теперь ситуация изменилась — магпины стали работать гораздо быстрее, их стоим ость снизилась, но зато возросла стоимость работы программиста. В настоящее врсмя приоритетное значение имеет создание программ, прп написании которых меньше вероятность допустить ошибку, даже если при этом несколько возрастет время их выполнения.
Например, определение пользовательских типов данных в М), объект класса (с1азз) в С++ и спецификация пакета (расйайе) в языке Аг(а упрощают процесс написания корректно работающих программ, но за зто приходится расплачиваться уменьшением скорости выполнения. В этой главе мы постараемся ответить на вопрос, как создаются языки програьчмирования.
При разработке языка программирования учитывается архитектура программного обеспечения, которая, соответственно, оказывает влияние на идеологию создаваемого языка. Это влияние опрелеляется: 1) реальным компьютсром, на котором будут выполняться написанные наланном языке программы; 2) молслью выполнения, пли виртуальным компьютером, который поддерживает этот язык на реальном компьютере. 2.1. Структура и принципы работы компьютера Компьютср представляет собой интегрированный набор алгоритмов и структур данных, способный хранить и выполнять программы.
Компьютер может быть создан как реальное физическое устройство и состоять из проводов, интегральных схем, монтажных плат и тому подобных элементов — в таком случае мы говорим о реальном, или физическом, компьютере, называя его просто компьютер. Но он также может быть построен с помощью программ, выполняемгях на каком-то другом компьютере, — тогла он называется програлсияо-моделируемым компьютером.
Ре- 2.1. Структура н принципы работы компьютера 65 ализация языка программирования осуществляется путем создания транслятора, который транслирует программы, написанные на данном языке, в программы па машинном языке, которые уже могут непосредственно выполняться на какомлибо компьютере. Этот компьютер может являться как реальным физическим компьютером, так и виртуалычыи компьютером, состоящим частично из аппаратуры и частично из программного обеспечения.
Любой компьютер составляют шесть основных компонентов, функциональность которых тесно взаимосвязана с основными аспектами языка программирования. 1, Данные, Компьютер должен обрабатывать различные типы простейших элементов данных и структур данных. 2. Элевентирные опериции. Компьютер должен иметь набор элементарных операций для работы с данными. 3. Упривление последовательностью действий Компьютер должен обеспечивать управление последовательностью выполнения элементарных операций.
4. Доступ к далнььч. Компьютер должен предоставлять механизмы управления данными, которые необходимы для выполнения любой операции. 5. Управление ламяглью. Компьютер должен предоставлять механизмы управления распределением памяти для программ и данных. 6. Операционная среда. Компьютер должен предоставлять механизмы связи с внешней средой, содержащей программы и данные, подлежащие обработке. Эти задачи определяют особенности разработки языков программирования.
Но прежде, чем рассматривать их в достаточно сложном контексте языков программирования высокого уровня, следует посмотреть на них в более простом контексте реального физического компьютера. 2.1.1. Аппаратные средства компьютера Архитектура компьютеров весьма разнообразна, но рис. 2, 1 иллюстрирует довольно типичную, традиционную организацию большинства компьютеров. Операпшвная память содержит программы и данные, которые подлежат обработке.
Эта обработка выполняется посредством интерп)эетатора, который по очереди декодирует каждую команду на машинном языке и вызывает указанную простейшую операцию вместе с указанными в качестве операндов входными данными. Простейшие операции манипулируют данными, расположенными в оперативной паьшти и в быстрых регистрах, а также могут осуществлять обмен программами или данными между памятью и внешней операционной средой. Давайте более детально рассмотрим перечисленные выше шесть основных функциональных особенностей компьютера. Данные. На схеме (рис.
2.1) изображены три основных компонента, предназначенные для хранения данных; оперативная память, быстрые регистры и внешние файлы. Оперативная память обычно представляет собой линейную последовательность битов, разделенную па слова фиксированной длины (как правило, слово содержит 32 или 64 бита) или байты, состоящие из 8 битов (4 или 8 байтов на одно слово).