«Lisp in Small Pieces» на русском

( Parentheses ) – Elegant weapons, for a more civilized ageЭта книга французского профессора Кристиана Кеннека об интерпретаторах Лиспа и Scheme довольно хорошо известна в англоязычном мире. Даже пару раз проскакивала на Хабре. Но в русскоязычном сообществе Scheme чаще всего ассоциируется со «Структурой и интерпретацией компьютерных программ» (aka SICP). Это хороший учебник для новичков, где целых две главы посвящены реализации используемого языка, однако в нём не рассматривается реализация довольно интересных и важных для Лиспа вещей вроде макросов, продолжений, динамических вычислений.

Однажды «Lisp in Small Pieces» попался мне в руки, и через несколько десятков страниц я осознал, что подобному бриллианту негоже пропадать в безвестности. А так как лучший способ получить больше адептов в секту популяризовать иностранную книгу — это перевести её на родной язык целевой аудитории, то этим я и занялся вместо того, чтобы нормально читать. Наконец, перевод, вёрстка и вычитка были завершены; результаты усилий представляются вашему вниманию.

Внутри читателя ожидают:
  • более 37000 скобок!
  • разбор по косточкам семантики всех конструкций Scheme, а также его родственников;
  • в том числе разбор его денотационной семантики — формального математического описания языка в терминах лямбда-исчисления;
  • 11 интерпретаторов и 2 компилятора (в машинный код описываемой там же VM и транслятор в код на Си);
  • объяснение сути рекурсии, замыканий и окружений, продолжений и стека вызовов, реализации макросов и метаязыков, а также чуть рефлексии и самомодифицирующегося кода;
  • множество экскурсов в историю Лиспа и причины принятых решений в дизайне языка;
  • собственная CLOS-подобная объектная система автора (и её реализация, разумеется);
  • время от времени возникающее чувство: «Да это же X из языка Y»;
  • список литературы по теме на 230 наименований.
В общем, отличный учебник по основам реализации языков программирования, с которым стоит ознакомиться не только любителям скобочек.

(tl;dr: PDF, EPUB, HTML)

Почему-то (по крайней мере, у меня сложилось такое ощущение) в разнообразных статьях для новичков на тему написания собственных реализаций часто внимание уделяется «скучным» вещам вроде синтаксического анализа, рассмотрению игрушечных языков и простейших оптимизаций вместо того, чтобы сконцентрироваться на главном: «Разрабатывать языки программирования — это забавное и творческое дело». Именно эту мысль необходимо вложить в голову заинтересовавшегося человека, подтвердив его надежды, а не утомлять рутиной или разбивать мечту чем-то вроде известного чек-листа. Ведь если программировать — это интересно, то программировать языки программирования — это интерес в квадрате! Если разработчик ПО — бог для своих программ, то разработчик языков — это… ух! О мирских делах можно позаботиться позже.

Scheme известен простотой реализации. Даже более того, этот язык по праву носит титул самого непереносимого языка программирования: более десятка популярных (и взаимно несовместимых) реализаций, ещё больше наколенных поделок разной степени готовности, и, наверное, сотни ежегодно сдаваемых студенческих интерпретаторов. Так что если реализовывать Scheme на самом Scheme, то можно полностью сконцентрироваться на самом процессе разработки языка, а не (преждевременно) думать о парсерах, подходящей системе типов, сборщике мусора и прочем. Именно этому учит данный учебник, оставляя низкоуровневые детали реализации для тех, кто заинтересуется, а что же всё-таки должно лежать глубже.

По соглашению с автором, книга распространяется на условиях CC BY-ND 3.0. Исходники книги (LaTeX и корявый HTML) вместе с инструкциями по сборке находятся на Github. Оттуда же из релизов можно скачать PDF и EPUB (варианты для экранов размером со спичечный коробок). В браузере почитать книгу можно здесь. Версия на мёртвых деревьях — в хотелках.

К сожалению, я не могу ручаться за качество EPUB-версии из-за отсутствия необходимого количества разнообразных девайсов для тестирования и общей убогости аппартной поддержки EPUB. Вероятно, на всём, что не имеет полноценного браузера, текст расползётся, предложенные в комплекте шрифты проигнорируются вместе с половиной CSS и всё будет выглядеть ужасно. По запросам могу штамповать PDF-ки под конкретные размеры экранов и разрешения. (Я буду рад дискуссии в комментариях на тему наиболее адекватного формата электронных книг для технической литературы.)
Поделиться публикацией

Комментарии 18

    +4
    Ох уж эти рамочки вокруг ссылок в PDF… Действительно есть люди, кому они нравятся?
      0
      Лучше сразу так: github.com/ilammy/lisp/pull/1
        +3
        Да я как-то уже привык к этим рамочкам, вообще не замечаю их.

        Замерджил фикс, обновил PDFку.
        0
        Спасибо за проделанную работу, больше скобок хороших и разных )
          0
          Большую работу сделали. Респект вам!
            0
            спасибо за труд, если захочется еще по лиспу что перевести то может это?
            The Art of The Metaobject Protocol или
            Object-Oriented Programming in Common LISP
              0
              Не рекомендую переводить «The Art of The Metaobject Protocol». Там две трети книги это просто справочник. А первая треть обильно усеяна кодом и описательного текста там совсем мало. Написано простым языком и можно читать в оригинале.

              «Object-Oriented Programming in Common LISP» не читал, но вроде тоже не шедевр.

              ИМХО, больше достойны перевода: «On Lisp» и «Let over lambda». Ну и Норвиг, конечно.
                +1
                Поучаствовать (и почитать) в переводе «On Lisp» можно тут: github.com/rigidus/onlisp
                  0
                  Скажите, а pdf/epub планируется?
                    0
                    в будущем
              –1
              Иллюстрация напоминает один из постеров к новому фильму Ларса фон Триера.
                0
                Спасибо за проделанную работу. Давно хотел эту книгу прочесть, но руки не доходили. Теперь-то точно прочту!
                  0
                  Перенёс из «Электронных книг» в «Компиляторы». Думаю. туда это лучше вписывается.
                    0
                    Ещё было бы не плохо в саму книгу включать её версию.
                    А то есть два pdf файла, скачанных в разное время на разных компах.
                    Разница в длинне один байт, т.е. явно не одно и то же, но кто более актуальный — не понятно.
                      0
                      Прикрутил простенькую версию для PDF. И опять обновил PDF-ку. На второй странице внизу дата сборки и номер ближайшего коммита, если есть.

                      У EPUB есть свои возможности для версионирования, но я в них пока не въехал и думаю, куда бы пристроить версию.
                    0
                      0
                      спасибо. =)
                        0
                        Шикарная книга, большое спасибо переводичкам.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое