Лиспекс создан как небольшой Лисп для решений, которые должно быть легко перечитать. Правило записано обычным текстом. В документированных пределах один и тот же ввод даёт одинаковый наблюдаемый ответ, а результат может сохранять форму данных, вместо того чтобы исчезать внутри приложения.
Сначала посмотрите на форму
Программа на Лиспексе строится из значений и форм в скобках. В вычисляемой форме первое имя указывает, что делать, а остальные выражения передают входные данные.
(+ 2 3)Результат
5Вложенные формы читаются изнутри наружу. Ниже define даёт значению имя, >=
отвечает на вопрос, а if выбирает одно из двух значений данных.
(define total 62)
(if (>= total 50)
'(decision free-shipping)
'(decision standard-shipping))Результат
(decision free-shipping)Апостроф перед '(decision free-shipping) означает «сохранить этот список как
данные». Без него Лиспекс попытался бы вызвать процедуру decision. Это
небольшое различие, возможность формы исполняться или сохраняться в виде
данных, относится к полезным идеям, которые вы будете осваивать постепенно.
Для каких задач подходит Лиспекс
Лиспекс подходит для правил вроде проверок прав, сроков возврата, ценовых границ, выбора маршрута и повторяемых преобразований. Его эталонная среда опирается на детерминированные правила вычисления, точную арифметику там, где она возможна, и устойчивую диагностику. Такие свойства делают небольшое правило более удобным для повторного запуска и сравнения.
Лиспекс намеренно не является универсальной средой для скриптов операционной системы. Он не прячет сетевые вызовы, часы, случайные значения или импорт пакетов внутри решения. Ваше приложение передаёт ввод и само решает, что делать с возвращённым значением.
Выберите вход
| Если вы хотите… | Откройте |
|---|---|
| выучить язык за шесть шагов | Путь обучения |
| запустить код без установки | Песочницу |
| увидеть повседневный синтаксис на одной странице | Синтаксис одним взглядом |
| установить локальную среду | Первую программу |
| собрать и запустить проверенный Native-артефакт | Запуск проверенного байткода |
| найти точную форму или процедуру | Справочник синтаксиса или Указатель процедур |
Точные изображения, проверенный байткод Native и Ваучер Лиспекса являются полноценными возможностями продукта, но ни одна из них не требуется для изучения языка. Изображения переносят точный исходный код. Байткод даёт явный локальный маршрут через виртуальную машину. Ваучер Лиспекса проверяет записанное решение позже. Он подтверждает, кто подписал правило, привязывает вашу собственную копию исходного кода и ввода и может потребовать одно точное локальное решение. Сначала освойте небольшой язык, тогда эти пути станут понятнее.
Запуск правила, которому вы не доверяете
Обычный способ запуска Лиспекса учитывает не всю работу, которую способно
вызвать запущенное правило, и не всю память, учитываемую для этого правила.
Продукты с выбором маршрута работают аналогично, как и авторский запуск через
lispex mcp serve. Используйте их только с правилами, которым вы доверяете.
Для правила, которому вы не доверяете, у загружаемой программы есть команда
lispex embed. Она предоставляет уменьшенный ограниченный набор возможностей
языка. Она задаёт лимит на работу и лимит на память, и оба значения получаются
одинаковыми при каждом запуске. У неё нет доступа к хост-машине и нет перехода
к другому способу запуска. Эти лимиты соблюдаются внутри того же процесса, а не
в песочнице на уровне операционной системы. Отмена вызова или завершение
процесса не дают ни решения, ни portable core, небольшой переносимой записи,
которую оставляет после себя завершённый запуск.
Обещание руководства
Документация отделяет то, что продукт делает, от того, чего он не утверждает. Эталонной средой выполнения служит Rust. Топаз это отдельный язык и его компилятор, и Лиспекс использует его в двух местах. Одно это виртуальная машина Топаза, которая выполняет подготовленные инструкции, другое это набор инструментов AOT, который заранее компилирует правило в отдельную программу. LIL, то есть Лиспекс, написанный на Лиспексе, и LIT, то есть Лиспекс, написанный на Топазе, являются проверочными бэкендами с ограниченным охватом. Они не служат скрытым запасным путём и не являются доказательством того, что все реализации везде совпадают. Вы можете пропустить эти механизмы во время прохождения курса и вернуться к Средам и бэкендам, когда понадобится развёртывание или перекрёстная проверка.
Слова, которые документация повторяет
Несколько слов повторяются в руководстве, в инструкциях и в истории выпусков. Для курса ни одно из них не нужно.
| Слово | Что оно значит |
|---|---|
| вычислитель | программа, которая выполняет правило |
| tree | встроенный интерпретатор, который читает ваш исходник напрямую |
| VM | виртуальная машина, то есть программа, которая выполняет подготовленные инструкции вместо чтения исходника |
| AOT | компиляция заранее, которая превращает правило в программу до её запуска |
| канонический | записанный каждый раз одинаково, поэтому один и тот же ввод даёт одни и те же байты |
| bounded | выполнение в пределах фиксированного лимита работы и памяти |
| meter | счётчик, который измеряет объём работы, потраченный на запуск |
| маршрут | один способ выполнить правило |
| route lock | небольшой файл, где записан выбранный маршрут без указания расположения продукта на машине |
| portable core | небольшая запись, которая связывает правило, ввод, лимиты и результат одного запуска |
| квитанция | запись о том, что дал один запуск или одна установка |
| сводная проверка | один прогон проверок, собранный в единый вывод |
| поверхность | место, где доступен Лиспекс, например Native, npm, сборка WebAssembly или Песочница, а поверхность языка означает охваченную его часть |
| Топаз | Отдельный язык и его компилятор. Лиспекс использует его как виртуальную машину Топаза, выполняющую подготовленные инструкции, и как набор инструментов AOT, который заранее компилирует правило в отдельную программу |
| LIL | Интерпретатор Лиспекса, написанный на Лиспексе |
| LIT | Лиспекс, написанный на Топазе |
| WASM | сборка WebAssembly |
Готовы? Откройте Путь обучения или сразу Первую программу, если предпочитаете учиться запуская код.