Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 3
Текст из файла (страница 3)
Олин или два из этих языков можно заменить на РОКТКАН, Аг!а или Разса!. Предполагается, что читатель знает хотя бы один процедурный язык — обычно это С, С++, )ача или РОКТКАХ, В вводных главах 1 и 2 приведен обзор материала, необходимого для понимания последующих глав. Глава ! содержит общие сведения о языках программирования, а в главе 2 дается краткий обзор аппаратной архитектуры компьютера, на котором программы выполняются. Главную тему книги составляют вопросы разработки и реализации языков программирования. Основа курса закладывается в главах 3 и 5- 12.
В них описываются базовая грамматическая модель языков программирования и компиляторов (глава 3), элементарные типы данных (глава 5), структуры данных и инкапсуляция 14 Предисловие к русскому изданию (глава 6), наследование (глава 7), операторы (глава Я), вызов процедур (глава 9), управление памятьк~ (глава 10), распределенная обработка (глава 11) и сетевое программирование (глава 12) — важнейшие аспекты проектирования языков.
В главе 4 углубленно рассматривается семантика языков программирования с введением в верификацию программ, депотационную семантику и ) -исчисление. Студенты первого и второго курсов могут пропустить эту главу. В настоящее издание, как и во все предыдущие, включено большое приложение с кратким описанием 12 языков, более или менее подробно рассматриваемых в книге. В книге рассматривается 12 тем, рекомендованных в 1991 г. ассоциацией ЛС М/ !ЕЕЕ Сошрнгег Бос1егу !о1пг Сцгпсп!иш Таз)г Рогсе для изучения в области языков программирования.
Курс по написанию компиляторов одно время занимал центральное место в учебных планах обучения студентов информационных специализаций, но сейчас многие полагают, что нс нужно требовать от кажлого стулента, чтобы он мог написать компилятор, — подобные задачи лучше предоставить высококлассным специалистам, а освободившееся время потратить на такие курсы, как технология программирования, разработка баз данных или другие, отражающие аспекты практического применения информационных технологий. Тем не менее мы полагаем, что навыки проектирования компиляторов должны вхолить в базовую подготовку каждого хорошего программиста. Поэтому в этой книге особое внимание уделяется компиляции различных языковых структур, а в главе 3 довольно подробно рассматриваются вопросы лексического анализа, Примеры, привеленные в 12 главах этой книги, написаны на языках РОКТКАН, Аг)а, С, )ага, Рааса!, МЕ, Е!ЯР, Рег!, Розшспрг, Рго1оя, Сч-ч- и Яп)а!1!а!к.
По мере необходимости приводятся дополнительные примеры на языках НТМ Е, РЕ/1, ЯЫОВОИ, АР!., ВАЯ!С и СОВО!.. Мы постарались принести примеры из широкого круга языков, чтобы преподаватель сам выбрал языки для примеров в своем курсе. Хотя все представленные языки можно кратко рассмотреть в течение одного семестра, мы не рекомендуем включать в учебньш курс практические задачи по каждому из этих языков. Для одного курса подобное разнообразие окажется чрезмерным. Десять программ, написанных на разных язгяках программирования, не дадут студенту глубоких знаний ни по одному из этих языков, Преподавателю рекомендуется выбрать три илн четгяре языка и уделить пм особое вннманис.
Все примеры в книге, за исключением простейших, были протестированы в соответствующих трансляторах. Тем не менее, как четко оговорено в разделе 1.3.3, правильная работа программ в нашей локальной системе еще не гарантирует, что транслятор обрабатывает эти программы в соответствии со стандартами языка. Согласно закону Мэрфи, да',ке самый простой пример может содержать ошибки. В этом случае мы приносим извинения за все причиненные неудобства. В завершение мы перечислим основные цели, которыми мы руководствовались при подготовке четвертого издания: + представить обзор основных парадигм, используемых при разработке современных языков программирования; + уделить особое внимание нескольким языкам и описать их на таком уровне, чтобы возможности этих языков можно бьшо продемонстрировать на практических примерах; Предисловие к русскому изданию 15 + исследовать реализацию каждого языка до такой степени, чтобы программист получил представление о соответствии между исходным текстом программы и ее поведением при выполнении; + руководствуясь формальной теорией, показать, какое место архитектура языков программирования занимает в научно-исследовательских разработках в области информационных технологий; + предоставить набор задач и ссылки на дополнительные источники информации, чтобы студенты могли самостоятельно расширить свои знания в этой важной области.
Мы с благодарностью принимаем ценные замечания, полученные от читателей 3-го издания, от редакторов 4-го издания и от сотен студентов университета штата Мэриленд, прослушавших наш курс, — их мнение по поводу изложения материала, содержащегося в книге, было особенно ценным для нас. Изменения в 4-м издании. Читатели 3-го издания найдут в настоящем издании следующие основные изменения.
В книге появилась новая глава, посвященная Жогж 'йг!де йгсЬ. Языкдауа занял свое место среди основных языков программирования, а включение обзора языков НТМ1 и РозгвсПрг поможет читателю отойти от классических представлений о языках как о «пожирателях чисел» в стиле РОКТКАЫ. 2. Описание объектно-ориентированной архитектуры переместилось ближе к началу книги, поскольку оно занимает очень важное место в разработке современного программного обеспечения.
Многие второстепенные разделы также были перемещены, благодаря чему изложение материала стало более логичным и последовательным, 3. Подробные описания языков во второй части 3-го издания принесли меньше пользы, чем мы рассчитывали. В каждукг из глав, в которой отражены основныс особенности какого-то из 12 использованных языков, бьши добавлены разделы с описанием их краткой истории, а описания языков переместились в приложение. Несмотря на все добавления, объем книги практически не увеличился, поскольку из нее был исключен устаревший материал. Надеемся, что в переводе на русский язык наша книга будет воспринята так же благожелательно, как и в оригинале, и что читатель одобрит наш подход к изложению материала.
Теренс 11ратт, Ховардсвилл, штат Вирджиггил, Марвин Зелковии, Ко медж-11арк, штат Мэриленд, ноябрь 2001 к Глава 1. Проблемы разработки языка Любую систему обозначений, пригодную для описания алгоритмов и структур данных, можно назвать языком программирования; в настоящей книге, однако, речь пойдет лишь о тех языках, которые реализованы и используются при программировании на компьютерах. В каком смысле реализуется язык программирования, мы обсудим в следующих двух главах. Остальные главы посвящены подробному описанию разработки и реализации различных компонентов языка. Нашей задачей является рассмотрение основных языковых концепций, общих для всех без исключения языков программирования, и иллюстрирование их примерами из широкого спектра наиболее распространенных языков.
В этой книге мы будем изучать применение этих языковых концепций на примере двенадцати основных языков программирования: Аоа, С, С++, ЕОКТКАХ, !ага, 1.!5Р, М1., Разса1, Рсг1, РозгзсПрц Рго!оя и бша!!тайц Кроме того, вкратце мы рассмотрим и некоторые другие языки, оказавшие влияние на интересующую нас область человеческой деятельности. Среди них АР 1., ВА51С, СОВО1., Рогт!г, Р1У1 и ЯХОВО14. Однако, прежде чем приступать к изучению языков программирования с общих позиций, следует разобраться, какую пользу это может принести программисту. 1.1. Зачем изучать языки программирования? К настоящему моменту разработаны и реализованы сотни языков программирования.
Еще в 1969 г. Саммет (Яапппет) [95] привел список из 120 достаточно широко используемых в то время языков, и с тех пор их число значительно возросло. Однако большинство программистов пользуются всего несколькими языками, многие же вообще ограничиваются всего одним или двумя. Обычно программисты работают с вычислительными системами, на которых используется какой-либо один определенный язык: 1ата, С или А~!а, Какую же пользу может получить программист от изучения множества различных языков, которыми едва ли станет пользоваться? На самом деле это имеет смысл, если вы не ограничитесь только поверхностным рассмотрением возможностей языка, а постараетесь постичь его концепции разработки и то, как они влияют на его реализацию.