Глава 1. Проблемы
разработки языка
Любую систему обозначений, пригодную для описания алгоритмов и структур
данных, можно назвать языком программирования; в настоящей книге, однако, речь
пойдет лишь о тех языках, которые реализованы и используются при программи
ровании на компьютерах. В каком смысле реализуется язык программирования,
мы обсудим в следующих двух главах. Остальные главы посвящены подробному
описанию разработки и реализации различных компонентов языка. Нашей зада
чей является рассмотрение основных языковых концепций, общих для всех без
исключения языков программирования, и иллюстрирование их примерами из ши
рокого спектра наиболее распространенных языков. В этой книге мы будем изучать применение этих языковых концепций на при
мере двенадцати основных языков программирования: Ada, C, C++, FORTRAN,
Java, LISP, ML, Pascal, Perl, Postscript, Prolog и Smalltalk. Кроме того, вкратце мы
рассмотрим и некоторые другие языки, оказавшие влияние на интересующую нас
область человеческой деятельности. Среди них APL, BASIC, COBOL, Forth, PL/1
и SNOBOL4. Однако, прежде чем приступать к изучению языков программирова
ния с общих позиций, следует разобраться, какую пользу это может принести про
граммисту.
1. 1. Зачем изучать языки
программирования? К настоящему моменту разработаны и реализованы сотни языков программирова
ния. Еще в 1969 г. Саммет (Sammet) [95] привел список из 120 достаточно широко
используемых в то время языков, и с тех пор их число значительно возросло.
Од
нако большинство программистов пользуются всего несколькими языками, мно
гие же вообще ограничиваются всего одним или двумя. Обычно программисты
работают с вычислительными системами, на которых используется какойлибо
один определенный язык: Java, C или Ada. Какую же пользу может получить про
граммист от изучения множества различных языков, которыми едва ли станет
пользоваться? На самом деле это имеет смысл, если вы не ограничитесь только поверхност
ным рассмотрением возможностей языка, а постараетесь постичь его концепции
разработки и то, как они влияют на его реализацию. На ум сразу же приходит шесть
главных мотивов:
1. 1. Зачем изучать языки программирования? 17
1. Вы сможете разрабатывать более эффективные алгоритмы. Многие языки
предоставляют возможности, которые при правильном использовании при
носят программисту пользу, а при неправильном могут привести к большим
затратам компьютерного времени или к логическим ошибкам в программе,
на исправление которых потребуется немало сил и времени. Даже програм
мист, пользующийся какимто определенным языком в течение многих лет,
может не понимать всех его возможностей. Типичным примером является
рекурсия — полезное средство программирования, которое при правильном
использовании позволяет осуществлять непосредственную реализацию эле
гантных и эффективных алгоритмов. Однако неправильное ее использова
ние может привести к катастрофическому увеличению времени выполне
ния программы.