← На главную

Lisp для веба: микрокод Rtml и без CGI-замыканий

18.05.2026 11:51 · hackernews

Основная причина выбирать Лисп для веб-приложений — полная свобода выбора языка. При разработке для собственных серверов вы управляете всем: от операционной системы до компиляторов, поэтому проблемы совместимости решаются самостоятельно. Эта гибкость подменяет устаревший подход, когда десятилетиями все приложения писали на C, так как программисты вынуждены были следовать ограничениям ОС. Теперь же рынок заставляет вас думать о выборе языка, потому что стартапы на более мощных инструментах вытеснят тех, кто игнорирует изменения и продолжает писать код на C++.

В разработке на Лиспе используется стиль инкрементального создания программ. Вы начинаете с малого, добавляя функции постепенно, но всегда сохраняя рабочую версию кода. Примером служит редактор Viaweb, выросший из 120-строчного примера до 25 тысяч строк без полного перепrogrammрования. Этот подход идеально сочетается с частыми релизами веб-софта. Интерактивный тоplevel позволяет быстро находить и фиксировать ошибки. Когда пользователь сообщал о баге, команда могла воспроизвести проблему, исправить её и выкатить патч за время разговора. Иногда пользователи даже не замечали исправления, потому что уже работали с обновленной версией.

Микрокоды на Лиспе стали ключевым инструментом для генерации HTML. Поскольку HTML и Лисп используют префиксную нотацию, команды вызывались внутри других команд, упрощая работу со сложной структурой. Разработчики создали встроенный язык Rtml, который по сути был набором макрокодов и операций Лиспа. Rtml позволял пользователям описывать страницы без синтаксических ошибок, так как код вводился через редактор структуры, похожий на инструменты Interlisp. Хотя изначально планировалось, что этим будут пользоваться консультанты, на практике этим интересовались только сами мерчанты, предпочитающие готовые шаблоны. Rtml служил способом контроля для продвинутых пользователей и индикатором для команды: если кто-то вынужден писать свой код, значит, в стандартных шаблонах чего-то не хватает.

Чтобы преодолеть состояниеlessness веб-сессий, команда использовала левические замыкания, имитирующие поведение подпрограмм. Это позволяло генерировать ссылки, ведущие на выполнение произвольного кода, сохраняющего контекст текущей страницы. Вместо стандартных cgi-скриптов, программисты могли написать макросы, которые сохраняли код в глобальной таблице и вызывали его по уникальному id. Это создавало эффект рекурсивного вызова функций. Например, при редактировании объекта можно было выбрать цвет не через скучное меню, а кликнув на образец, перейти к палитре и вернуться назад. Для пользователя это выглядело как нормальная навигация внутри одной формы, хотя технически происходили новые вызовы. Использование замыканий делало интерфейс намного более продвинутым по сравнению с конкурентами, которые были ограничены статичными формами.

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