← На главную

Почему Lisp не стал мейнстримом, хотя мог всё

09.07.2026 13:06 · hackernews

Первое, что видит программист в коде на Lisp — «что за чертовщина?» Скобки, странные отступы, format t вместо print. Но за этим синтаксисом скрывается язык, который меняет подход к программированию. Lisp переворачивает мышление: ты не просто пишешь код, а адаптируешь сам язык под свою задачу. Пол Грэм называл это парадоксом Блуба — программисты на обычных языках просто не видят, чего им не хватает, пока не попробуют Lisp.

Главная суперсила Lisp — макросы. Не те макросы, что в C или Rust, которые просто подставляют код и убирают шаблонность. В Lisp макрос создаёт новые конструкции языка. Например, в Common Lisp нет встроенного while. Но его можно дописать самому — буквально расширить язык. Если вместо макроса взять обычную функцию, аргументы вычислятся сразу, и всё сломается. Макрос же работает с кодом как с данными, не трогая аргументы до нужного момента.

Это возможно потому, что в Lisp код — это те же списки. Вся программа состоит из s-expr: атомов (чисел, строк, символов) или вложенных списков. Lisp расшифровывается как LISt Processing. Код и данные выглядят одинаково — это свойство называется гомоиконность. Поэтому макрос может взять кусок исходника, преобразовать его как список и отдать компилятору уже новую программу. Это называется «программы, пишущие программы».

Вторая особенность — Lisp как живая система. Обычный цикл разработки: написал → скомпилировал → запустил → увидел баг → заново. В Lisp всё иначе. Ты запускаешь процесс, подключаешь к нему REPL, загружаешь проект. REPL — это окно в работающий инстанс программы. Можно менять функции и данные на лету, без перезапуска. Никакого hot-reload как отдельного инструмента не нужно — он встроен по умолчанию. Процесс может жить неделями, а ты эволюционируешь программу прямо внутри.

Из этих двух вещей рождается третья — расширяемое ПО. Разработчик пишет DSL — предметно-ориентированный язык для своей программы. Потом просто даёт пользователям этот же DSL. Внутренние макросы для генерации HTML или математических графиков становятся публичным API. Пользователь пишет на том же Lisp, с теми же циклами и условиями — не нужно учить новый шаблонизатор с фигурными скобками. AutoCAD использует AutoLISP, Emacs построен на собственном диалекте Lisp — и этот редактор превратили в браузер, почтовый клиент, плеер и даже оконный менеджер.

Ричард Столлман говорил: если вы не знаете Lisp, вы не понимаете, что значит «мощный и элегантный язык». При этом «времени Lisp» так и не наступило — он не стал мейнстримом. Но это второй старейший язык после Fortran. И его фичи не работают по отдельности — силу даёт именно их сочетание: расширяемость, живая среда, REPL и возможность растить язык под проблему.

Читать оригинал →