Pull to refresh

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

Reading time 3 min
Views 33K
( 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-ки под конкретные размеры экранов и разрешения. (Я буду рад дискуссии в комментариях на тему наиболее адекватного формата электронных книг для технической литературы.)
Tags:
Hubs:
+49
Comments 18
Comments Comments 18

Articles