Добро пожаловать в Lispex, небольшой Лисп, созданный ради ясности и удовольствия писать код.
Lispex по-новому прочитывает мощь и простоту Лиспа. Он сохраняет ключевую идею «код и есть данные» и убирает механику, которая обычно нарастает вокруг неё. Грамматика мала и последовательна, и со временем перестаёт замечаться.
Выполняется Lispex напрямую. Эталонный интерпретатор, написанный на Rust и скомпилированный в WebAssembly, запускает код прямо в браузере. Попробуйте в Песочнице.
Один язык, одна грамматика
Lispex отбрасывает специальный синтаксис и держится одного принципа. Всё записывается в скобках (). Арифметика, определения функций, условия и списки данных принимают одну и ту же форму S-выражения.
Единая грамматика означает, что сам код становится данными с видимой структурой. Читать и анализировать код проще, а программы могут порождать другие программы и работать с ними. Старая идея Лиспа, код и есть данные, здесь взята в самом простом виде.
Что такое Lispex?
Имя Lispex сокращает Lisp Expression. Смысл прямой: программы записываются как выражения Лиспа, и эти выражения остаются удобными для чтения как данные.
Здесь немного специального синтаксиса. Значения, вызовы, условия, определения и цитируемые данные имеют одну форму S-выражений.
Замысел скромный и конкретный. Грамматика должна оставаться достаточно малой, чтобы исходный код было легко проверять.
Попробуйте Lispex
Посмотрите, как грамматика работает на небольшом примере. Код ниже отфильтровывает чётные числа из списка и умножает каждое на 10. Lispex выполняется прямо в браузере, так что пример можно вставить в Песочницу и запустить.
;; Весь код состоит из основных форм и функций стандартной библиотеки.
(define numbers '(1 2 3 4 5 6))
;; Отфильтровать чётные числа.
(define evens
(filter (lambda (n) (= (modulo n 2) 0))
numbers))
;; Умножить каждое чётное число на 10.
(map (lambda (n) (* n 10)) evens)
;; ⇒ (list 20 40 60)Пример читается сверху вниз как один конвейер данных, сначала filter, затем map, и никакой другой синтаксис не стоит на пути.
Ключевые преимущества
- Выполняется напрямую. Эталонный интерпретатор, написанный на Rust и скомпилированный в WebAssembly, целиком работает в браузере. Пишете код в Песочнице и сразу видите результат, без установки.
- Маленькое, предсказуемое ядро. Минимальный набор основных форм и детерминированные правила преобразования делают программы лёгкими в изучении и предсказуемыми.
- Единое S-выражение. Код и данные разделяют одну структуру, поэтому анализ, преобразование и генерация кода остаются простыми.
- Практичная стандартная библиотека. Чистое ядро языка отделено от явных модулей ввода-вывода и системных функций, так что ядро остаётся стабильным, а библиотека практичной.
Следующие шаги
Готовы начать путешествие с Lispex?
- Запустите код прямо сейчас в Песочнице. Эталонный интерпретатор выполняет Lispex в браузере, без установки.
- Начните с руководства «Начало работы», чтобы настроить окружение и запустить свою первую программу.
- Изучите «Синтаксис», где описаны токены, литералы, основные и производные формы и правила нормализации входной грамматики.
- Прочитайте про Lispex Vouch, поток квитанций из v1.3 для решающих правил внутри проверяемого подмножества.
- Исследовательский трек смотрите на CSKernel™.
Мы с нетерпением ждём, что вы создадите на Lispex.