Справочник

Вычислитель Лиспекса

Выполните правило Лиспекса из командной строки и проверьте результат и лимиты ресурсов.

Выполните одно правило Лиспекса из командной строки и прочитайте результат или отчёт об исчерпании ресурсов. Для повторных вызовов из приложения следуйте руководству Вызов правил Лиспекса.

Сначала установите Топаз. Топаз 5.21 включает Лиспекс 1.21. Во время вычисления правила оно не может обращаться к файлам, сети или системным часам.

Подготовьте три файла

Создайте рабочий каталог и сохраните в нём rule.lspx.

LISPEX
(if (< 10 15) "allow" "deny")

Лиспекс предназначен для правил принятия решений и использует синтаксис, близкий к Scheme. Это правило сравнивает две константы и возвращает "allow". Входное значение оно не использует. О языке читайте на сайте Лиспекс.

В том же каталоге создайте value.lpxvalue одной из следующих команд. Первую выполняйте в совместимой с Bash оболочке, вторую в PowerShell.

BASH
printf '\000' > value.lpxvalue

PowerShell

POWERSHELL
[IO.File]::WriteAllBytes((Join-Path (Get-Location) 'value.lpxvalue'), [byte[]]@(0))

Файл содержит один байт 00, который кодирует пустое значение nil в общем формате lispex.embed-value/v1. Это двоичный файл. Если набрать символы 00 в текстовом редакторе, получится другой вход.

Сохраните следующий файл целиком как limits.json.

JSON
{
  "schema": "topaz.lispex-embed-limits/v1",
  "prepare": {
    "raw_source_bytes": 4096,
    "prepare_work": 1000000,
    "logical_allocation": 1000000,
    "syntax_depth": 64
  },
  "evaluate": {
    "canonical_input_bytes": 4096,
    "eval_work": 10000,
    "logical_allocation": 1000000,
    "semantic_frames": 1000,
    "traversal_depth": 256,
    "output_bytes": 4096,
    "diagnostic_bytes": 4096,
    "transcript_bytes": 4096,
    "transcript_events": 100,
    "result_bytes": 4096
  }
}

Сохраните все поля. Значения можно уменьшать, но добавление или удаление поля делает документ лимитов недопустимым. eval_work считает работу вычислителя. Разницу между лимитами правила и квотами приложения объясняет Вызов правил Лиспекса.

Выполните правило и прочитайте результат

Запустите команду из каталога с тремя файлами. Каталог результатов lispex-result ещё не должен существовать.

BASH
topaz lispex embed run --source rule.lspx --input value.lpxvalue --limits limits.json --output lispex-result

Команда завершается с кодом 0 без стандартного вывода. Она создаёт lispex-result/report.json и lispex-result/result.lpxvalue. Откройте отчёт и найдите объект outcome.

JSON
{ "category": "complete", "code": "complete", "operation": "evaluate" }

result.lpxvalue содержит двоичный результат. Отчёт также фиксирует правило, вход, лимиты, вычислитель, среду выполнения и расход ресурсов.

Чтобы увидеть исчерпание работы, скопируйте limits.json в small-limits.json. Измените evaluate.eval_work с 10000 на 1, сохранив остальные поля. Укажите новый каталог результатов.

BASH
topaz lispex embed run --source rule.lspx --input value.lpxvalue --limits small-limits.json --output lispex-limit

Эта команда также завершается с кодом 0 без стандартного вывода. В lispex-limit/report.json будет следующий объект outcome.

JSON
{ "category": "limit-exhaustion", "code": "eval_work", "operation": "evaluate" }

Файла result.lpxvalue нет, поскольку правило не завершилось. Верните eval_work значение 10000 и укажите ещё не использованный каталог результатов, чтобы завершить вычисление. Код завершения CLI сообщает, что отчёт записан. Различайте завершение, ошибку правила и исчерпание ресурсов по outcome.category.

ИсходЗаписанные файлы
Завершённое вычислениеreport.json и result.lpxvalue
Детерминированная ошибка правила или исчерпание ресурсовreport.json
Отклонённый запрос или сбой движкаКаталог результатов не создаётся

Проверьте установленный вычислитель

BASH
topaz lispex embed info --json

Команда выводит JSON и завершается с кодом 0. Следующие поля определяют компонент и формат значений, используемые самостоятельной командой CLI.

ПолеЗначение
component.idИдентификатор установленного вычислителя и его версии
semantic.profileIdlispex/r7rs-rule-embedded-core/1
semantic.valueCodecIdlispex.embed-value/v1

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

Вызывайте правила из приложения

Для пакета используйте std.lispex и сгенерированные функции правил в std.lispex.rules. Руководство Вызов правил Лиспекса содержит все файлы, обычный вывод и вывод при исчерпании работы.

Профиль приложения называется lispex/r7rs-rule-current-profile-bounded/1. Каждое вычисление получает новую память, глобальные переменные, счётчики ресурсов и журнал выполнения. Приложение также применяет квоты, сроки выполнения, отмену и очистку.

Используйте evaluate для результата и evaluateWithEvidence для результата с сохраняемой записью, когда она доступна. Руководство описывает хранение, просмотр, проверку, извлечение ядра в формате Лиспекса и freshReplay.

Эти записи не подписаны и не аутентифицированы. Они не содержат издателя, одобрения поставщика, полномочий подписи, допуска компонента или разрешения на внешние действия. Локальный отказ, отмена, отказ очереди, защитная остановка и сбой движка не создают переносимого ядра.

Приложения работают через интерпретатор или нативные продукты на пяти релизных платформах. Собранный нативный файл можно перенести и запускать после удаления исходников проекта и компилятора. Маршруты Web, no-capability и MCP с пустым набором компонентов отклоняют выполнение или создание выходных файлов. Существующие пакеты Топаза 5.18 сохраняют отдельный профиль совместимости embedded-core и идентификаторы подготовленных правил. Отказ не переключает профиль или среду выполнения.

Завершение поддержки LIL и LIT

Поддержка LIL и LIT завершена в 5.21, после того как они выполнили свою роль во внутренней перекрёстной проверке. Обновления функций, новые выпуски, поддержка установки и запуска прекращены. Подробности приведены в разделе История. --target lispex и --target lit отклоняются до записи выходных файлов, как описано в разделе Целевые платформы.

Связанные разделы