Интеграция

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

Выполните правило с полными входными файлами, прочитайте результат и различайте CLI, вызовы из приложения и тесты LIT.

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

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

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

Создайте рабочий каталог и сохраните в нём 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.idlispex-embed-evaluator/1.20.0
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 и идентификаторы подготовленных правил. Отказ не переключает профиль или среду выполнения.

Разберитесь с тестами LIT

LIT означает Lispex-in-Topaz. Это интерпретатор, написанный на Топазе для тестирования инструментария. Тесты выполняют один исходный код напрямую, через сгенерированный Rust и через Web.

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

LIT входит в систему тестирования репозитория и отсутствует в установленном пакете. --target lispex и --target lit отклоняются до записи выходных файлов. Для вычисления правил используйте команду CLI или API приложения, описанные выше.

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