Песочница

Lispex

Lispex дистиллирует суть Лиспа в небольшой закрытый язык. Один и тот же эталонный интерпретатор выполняет его в браузере и в CLI.

Добро пожаловать в Lispex, небольшой Лисп, созданный ради ясности и удовольствия писать код.

Lispex по-новому прочитывает мощь и простоту Лиспа. Он сохраняет ключевую идею «код и есть данные» и убирает механику, которая обычно нарастает вокруг неё. Грамматика мала и последовательна, и со временем перестаёт замечаться.

Выполняется Lispex напрямую. Эталонный интерпретатор, написанный на Rust и скомпилированный в WebAssembly, запускает код прямо в браузере. Попробуйте в Песочнице.

Один язык, одна грамматика

Lispex отбрасывает специальный синтаксис и держится одного принципа. Всё записывается в скобках (). Арифметика, определения функций, условия и списки данных принимают одну и ту же форму S-выражения.

Единая грамматика означает, что сам код становится данными с видимой структурой. Читать и анализировать код проще, а программы могут порождать другие программы и работать с ними. Старая идея Лиспа, код и есть данные, здесь взята в самом простом виде.

Что такое Lispex?

Имя Lispex сокращает Lisp Expression. Смысл прямой: программы записываются как выражения Лиспа, и эти выражения остаются удобными для чтения как данные.

Здесь немного специального синтаксиса. Значения, вызовы, условия, определения и цитируемые данные имеют одну форму S-выражений.

Замысел скромный и конкретный. Грамматика должна оставаться достаточно малой, чтобы исходный код было легко проверять.

Попробуйте Lispex

Посмотрите, как грамматика работает на небольшом примере. Код ниже отфильтровывает чётные числа из списка и умножает каждое на 10. Lispex выполняется прямо в браузере, так что пример можно вставить в Песочницу и запустить.

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.