В этой книге автор постарался показать уникальные особенности, которые выделяют Лисп из множества других языков программирования, а также предоставляемые им новые возможности, например макросы, которые позволяют разработчику писать программы, которые будут писать другие программы. Лисп – единственный язык, который позволяет с легкостью осуществлять это, потому что только он предлагает необходимые для этого абстракции.
Книга «ANSI Common Lisp» предназначена как для студентов, изучающих этот язык, так и для профессиональных программистов. Ее чтение не требует предварительного знания Лиспа. Опыт написания программ на других языках, безусловно, полезен, но не обязателен. Повествование начинается с основных понятий, что позволяет уделить особое внимание тем моментам, которые обычно приводят в замешательство человека, впервые знакомящегося с Лиспом. Профессиональные разработчики, желающие изучить Лисп, оценят простой, практический подход. Те, кто уже знаком с языком, найдут в книге множество полезных примеров и оценят ее удобство в качестве справочника по стандарту ANSI Common Lisp.
Лучший способ выучить Лисп – начать писать на нем программы. После небольшого введения в главе 2 объясняется все, что понадобится для создания первых Лисп-программ. В главах 3–9 рассматриваются ключевые элементы программирования на Лиспе. Особое внимание уделяется таким понятиям, как роль указателей в Лиспе, использование рекурсии и значимость функций как полноценных объектов языка.
Следующие материалы предназначены для читателей, которые хотят более тщательно разобраться с техникой программирования на Lisp. Главы 10–14 охватывают макросы, CLOS (объектная система Common Lisp’а), операции со списками, оптимизацию, а также более сложные темы, такие как пакеты и макросы чтения.
Главы 15–17 подводят итог предыдущих глав на трех примерах реальных приложений: программы для создания логических интерфейсов, HTML-генератора и встроенного объектно-ориентированного языка программирования.
Последняя часть книги состоит из четырех приложений, которые включают руководство по отладке, исходные коды для 58 операторов языка, описание основных различий между ANSI Common Lisp и предыдущими версиями языка, а также справочник по каждому оператору в Common Lisp.
Несмотря на то, что эта книга посвящена ANSI Common Lisp, вы можете изучать по ней любую разновидность Common Lisp. Примеры, демонстрирующие новые возможности обычно сопровождаются комментариями, поясняющими, как они могут быть адаптированы к более ранним реализациям.
Данное издание было написано 15 лет назад, но несмотря на это, книга и на настоящий момент представляет большую практическую ценность. Она соответствует стандарту языка, который не менялся с момента ее написания, и, похоже, не будет меняться в течение ощутимого времени. Кроме того, в ней описаны модели и методы, пришедшие в программирование из Лиспа и в той или иной мере актуальные в современном программировании.
В числе уникальных особенностей Лиспа Грэм выделяет интерактивность, автоматическое управление памятью, динамическую типизацию и замыкания. На момент написания книги Лисп конкурировал с такими языками, как С, C++, Паскаль, Фортран (на протяжении книги автор сравнивает Лисп именно с ними). Эти языки «старой закалки» действительно представляют полную противоположность Лиспу. На настоящий момент разработано множество языков, в которых в той или иной степени заимствованы преимущества Лиспа. Таким, например, является Perl, который вытесняется более продвинутым языком Python, а последний, несмотря на популярность, сам испытывает конкуренцию со стороны языка Ruby, известного как «Лисп с человеческим синтаксисом». Такие языки благодаря гибкости быстро находят свою нишу, при этом оставаясь средствами общего назначения. Так, Perl прочно занял нишу скриптового языка в Unix-подобных системах. Однако, механизм макросов, лежащий в основе Лиспа, пока не был заимствован ни одним из языков, так как прочно связан с его синтаксисом. Кроме того, Лисп выгодно отличается от своих «последователей». Согласитесь, искусственное добавление возможностей в язык с уже существующей структурой и идеологией существенно отличается от случая, когда язык изначально разрабатывался с учетом данных возможностей.
Зачем изучать Лисп? Потому что он позволяет делать то, чего не могут другие языки. Лисп предоставляет такие инструменты, которых нет в других языках. С макросами, замыканиями и динамической типизацией Лисп превосходит объектно-ориентированное программирование.
Помимо новых инструментов, Лисп предоставляет и новые приемы. Отдельно взятые технологии, впервые появившиеся в Лиспе, такие как автоматическое управление памятью, динамическая типизация, замыкания и другие, значительно упрощают программирование. Взятые вместе, они создают критическую массу, которая рождает новый подход к программированию.