Интеграция

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

Выполните правило Лиспекса, проверьте результат и лимиты ресурсов и узнайте причины завершения поддержки LIL и LIT.

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

Сначала установите Топаз. Топаз 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 выполнили свою роль во внутренней перекрёстной проверке. Их поддержку завершили, чтобы сократить дальнейшие затраты на сопровождение. Обновления функций, новые выпуски, поддержка установки и запуска прекращены. Новые перекрёстные проверки и приём кандидатов LIT больше не входят в требования к выпуску.

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

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

Прежнее завершение выпуска сопутствующих продуктов Топаз VM и AOT было отдельным изменением. Вычислитель Лиспекса продолжает использовать поддерживаемые движки выполнения. Топаз компилирует себя компилятором, написанным на Топазе.

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