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

Роберт У. Себеста, Основные концепции языков программирования. «Вильямс», Москва, Санкт-Петербург, Киев, 2001 г., 672 с. ил.
Владение основными концепциями языка программирования — непременный атрибут профессионального уровня специалиста. Определенную помощь в этом может оказать книга Роберта Себесты, посвященная рассмотрению принципиальных вопросов развития наиболее известных языков программирования. Немаловажным ее достоинством является исторический контекст — от «алгоритмического языка программирования» Конрада Цузе до современных языков.

Пятое издание книги, выпущенное Addison Wesley и переведенное на русский язык издательским домом «Вильямс», значительно отличается от предыдущих. Бросается в глаза отсутствие специальной главы об объектно-ориентированных языках. Вместо нее появилась глава о языковой поддержке объектно-ориентированного программирования. Как утверждает автор, такой взгляд обозначает начало следующей стадии развития императивных языков. Кроме того, в книге уделено внимание Java и функциональным языкам, например вместо запатентованного языка Miranda, их концепция представлена с помощью общедоступного языка Haskell. Изменения коснулись и других глав: расширен раздел, посвященный аксиоматической и денотационной семантике, удалены некоторые материалы по Модула-2, в частности, о сопрограммах и поддержке абстрактных типов данных в обмен на включение в книгу многочисленных текущих изменений в развивающихся языках.

Автор рассматривает свою книгу, прежде всего, как учебное пособие и дает рекомендации преподавателю по использованию ее материала для построения различных курсов, но, разумеется, она может быть рекомендована и для самостоятельного изучения. Однако для отечественного читателя данное издание обладает одним недостатком — объяснимым, но от этого не менее прискорбным отсутствием ссылок на русскоязычные публикации. Чтобы у читателя не складывалось впечатление об истории языков, как о написанной во времена железного занавеса, редактору следовало бы озаботиться о соответствующих дополнениях, по крайней мере, к списку литературы.

Книга состоит из пятнадцати глав, включающих материалы по собственно языкам, их общим свойствам, отношению к данным и видам обработки. В двух первых обсуждаются общие представления о языках программирования, побудительные мотивы для изучения концепций языков и областей применения программирования от научных приложений до специализированных. Предлагается четыре критерия оценки языков: читабельность, легкость создания программ, надежность и стоимость. Естественно для концепции языков важны их категории, компромиссы при разработке, методы реализации (компиляция, чистая интерпретация и смешанная система), а также среда программирования.

Обзор основных языков можно рассматривать как часть книги, имеющую самостоятельный интерес. В ней описаны алгоритмический язык Plankalkul и множество других, дающих убедительную информацию для понимания концепции.

Следующим шагом в постижении концепции является знакомство с описанием синтаксиса и семантики языков — здесь имеются материалы по синтаксису и формальным методам его описания, а также по синтаксическому анализу. Не обойдено вниманием использование в языках атрибутивной грамматики и динамической семантики. Дальнейший материал книги связан с семантическими понятиями: имена, связывание, проверка типов и области видимости, а также типы данных. Рассматриваются семантические правила в виде выражений и операторов присваивания, описывается структура управления, реализуемая в языках программирования.

Как реагируют языки на возникновение подпрограмм и их реализацию, описываемую с помощью общей семантики вызовов, возвратов и других способов, показано в двух главах, а материал отдельной главы целиком посвящен появлению абстрактных типов данных от истоков до современности. Следующий шаг в понимании концепции языков автор усматривает в поддержке объектно-ориентированного программирования и в соответствующей главе прослеживает ее во многих языках от Smalltalk до Eiffel.

Развитие многопроцессорных архитектур не могло не потребовать адекватной реакции со стороны языков программирования: поддержка параллельности и синхронизации процессов с помощью семафоров, мониторов, передачи сообщений, потоков, управления на уровне операторов и др. Иллюстрации к изложению даются с использованием возможностей Ada 95, Java и High-Performance FORTRAN. К концептуальным понятиям в книге отнесены возможности языков по обработке исключительных ситуаций. В качестве иллюстрации выбраны реализации обработки исключительных ситуаций, принятые в языках PL/1, Ada, C++ и Java.

Завершают книгу главы о функциональных языках и языках логического программирования, где представлены LISP, Scheme, COMMON LISP, ML и Haskell, а также Prolog. В книге помещен также большой список литературы и предметный указатель, а также резюме в конце каждой главы и упражнения. Но, к сожалению, для многих читателей работа с приложениями и упражнениями возможна только по получении электронного учебника (правда, на ftp-сервере по адресу ftp://ftp.aw.com/cseng/authors/sebesta/concepts4e/ имеется набор диапозитивов к лекциям из первых 13 глав книги).