Истоки и вдохновение: от SMoL и Stacker к Smolts
Smolts вырос из учебного курса. Два года назад автор построил эту IDE, чтобы использовать её в преподавании Programming Languages — дисциплины, где студенты разбирают, как устроены языки программирования.
Фундамент — SMoL, «Standard Model of Languages», учебный язык, описанный в работах Шрирама Кришнамурти и коллег и связанный с книгой PLAI. Проще говоря, SMoL даёт компактную модель языка, на которой удобно показывать семантику: окружения, продолжения, хранилище.
Отдельная линия родства — проект Stacker, который Куанг-Чен Лу и Шрирам разрабатывали для обучения. Именно он вдохновил автора Smolts напрямую: идея пошагового разбора программы в браузере пришла оттуда.
Связь простая и прямолинейная: SMoL задаёт язык, Stacker — педагогический подход к его изучению, а Smolts — среда, где всё это можно потрогать руками прямо в браузере.
Ключевые возможности: пошаговое выполнение и визуализация состояния
Отладчик, в котором нельзя вернуться на шаг назад, — как просмотр детектива с выключенной перемоткой: моргнули в неподходящий момент и уже не поймёте, кто что сделал. Smolts эту проблему снимает: программа исполняется шаг за шагом, и шаг допускается не только вперёд, но и назад. Если вы щёлкали слишком быстро и пропустили нужный момент, просто откатитесь на один шаг — перезапускать программу не нужно.
Есть и режим «run to cursor»: вы ставите курсор в определённое место текста и запускаете исполнение до него. Вместо того чтобы давить на шаг десятки раз, вы одним действием проскакиваете уже понятный участок и останавливаетесь там, где начинается интересное.
Главное отличие от привычного отладчика — что именно вы видите на каждом шаге. Smolts отображает текущее продолжение, окружение и хранилище. Продолжение — это, попросту говоря, то, что программе ещё предстоит сделать: оставшийся кусок вычисления. Окружение — таблица, где имени переменной сопоставлено её значение. Хранилище — память, куда попадают изменяемые данные, которые не сводятся к простой привязке имени к значению. Для студента, разбирающего семантику языка, это шанс увидеть в явном виде то, что обычно скрыто внутри интерпретатора.
Эти три структуры не просто показываются сбоку — среда аннотирует сам текст программы, подписывая значения переменных и выражений прямо в редакторе. Вам не нужно переводить взгляд между кодом и панелью: значение видно там же, где написан код. Можно попробовать это самому — среда открыта по адресу `https://smol.leastfixedpoint.com/`, а исходники лежат в git.
Аннотации в редакторе: значения переменных и выражений
Отдельного окна с переменными в Smolts нет — значения выводятся прямо в тексте программы. На каждом шаге IDE подписывает рядом с идентификатором или выражением то, во что он вычисляется. Выражение (+ 1 2) получает пометку 3; имя переменной — её текущее значение. Держать в голове таблицу привязок больше не нужно: ответ уже стоит рядом с тем местом, которое вы читаете.
Смысл в том, что текст программы и её состояние показываются вместе. Вы смотрите на исходник и одновременно видите, что в нём происходит на текущем шаге, — не переключаясь между панелями и не сопоставляя строку кода с отдельным списком переменных. Такой режим полезен при обучении: студент видит не абстрактную машину состояний, а знакомый код с подсказками.
Написать программу можно на диалекте SMoL, основанном на S-выражениях, и сразу пройти её по шагам. Проект открыт: попробовать его можно в браузере на smol.leastfixedpoint.com, а исходники лежат в git.
Демонстрация работы: видео июля 2024 года
Внизу поста — короткое видео. Запись сделана в июле 2024 года и запечатлела чуть более раннюю версию системы, но принцип работы с тех пор не изменился: тот же проход по шагам, те же пометки в редакторе, то же отображение текущего продолжения, окружения и хранилища. Так что смотреть видео имеет смысл, даже если вы уже пробовали актуальную сборку: расхождения будут в деталях интерфейса, а не в сути.
Если предпочитаете сразу запустить всё самому, IDE доступна по адресу smol.leastfixedpoint.com. Исходники лежат в git — репозиторий открыт, автор принимает замечания, правки и pull request'ы.
Доступность и исходный код: как попробовать и внести вклад
Открыть IDE можно прямо в браузере: smol.leastfixedpoint.com. Регистрация не нужна, установка тоже — достаточно перейти по ссылке и начать писать программу на диалекте SMoL с S-выражениями.
Если хотите заглянуть внутрь или что-то поправить, код лежит в git: git.leastfixedpoint.com/dacs/smolts. Автор проекта открыт к обратной связи — приветствуются комментарии, замечания и pull request'ы. Связаться можно по электронной почте или через fedi, но для правок в коде достаточно самого репозитория.
Полезно знать заранее: реализация местами сырая и неполная, а часть багов связана с управлением состоянием в Svelte. Так что если что-то поведёт себя странно — это не вы делаете что-то не так.
Известные ограничения: ошибки управления состоянием Svelte
Значительная часть сбоев в smolts связана с управлением состоянием в Svelte. Автор прямо называет эту категорию проблем: реализация местами сырая и половинчатая, и баги в реактивности — не редкость, а скорее ожидаемая особенность текущей версии. Зная это, вы не потратите время на поиски ошибки в собственной программе на SMoL, если IDE вдруг отреагирует нелогично.
Практический смысл такого предупреждения прост: инструмент находится в активной разработке, поэтому странное поведение интерфейса — скорее вопрос к реализации, чем к вашим действиям. Если что-то выглядит сломанным, это действительно может быть сломано.
Выводы и рекомендации
Сначала посмотрите на название. smolts — это IDE для учебного языка SMoL, построенная вокруг работы Шрирама Кришнамурти и вдохновлённая Stacker; вы пишете программы на диалекте SMoL на основе S-выражений и пошагово исполняете их. Инструмент изначально задумывался для курса по языкам программирования, хотя автор признаётся, что пока не использовал его в преподавании. Отсюда первый вывод: перед вами не готовый продукт, а площадка для эксперимента и обучения.
Второй вывод касается того, что именно вы получаете. IDE в реальном времени отрисовывает текущую континуацию, окружение и хранилище, а прямо в редакторе помечает значения переменных и выражений. Шаг доступен и назад — удобно, если вы кликали слишком быстро и пропустили деталь, — плюс есть режим «выполнить до курсора». Это не украшения, а рабочий способ разобраться, как программа приходит к результату.
Третий вывод — про зрелость. Автор прямо говорит, что реализация местами корявая и незаконченная, но при этом считает идею многообещающей: управление проектами через git прямо в браузере выглядит действительно интересно и хорошо передаёт замысел, даже если сегодня выполнено не до конца. Так что оценивать smolts стоит как иллюстрацию подхода, а не как отточенный инструмент.
Практический совет: откройте демо-версию по адресу https://smol.leastfixedpoint.com/ и прогоните короткую программу в пошаговом режиме, сразу комбинируя шаг назад и «выполнить до курсора», — так вы за несколько минут увидите и сильные стороны замысла, и его текущие шероховатости. Если найдёте что-то стоящее внимания, автор ждёт комментариев, замечаний и pull request'ов.