Топаз предоставляет две поверхности Лиспекса. topaz lispex embed run вычисляет одно правило и записывает результат без настройки пакета и сборки. LIT (Lispex-in-Topaz) — написанный на Топазе исходный код интерпретатора, который выполняется напрямую, через сгенерированные Rust и Python, а также по маршрутам Web как поверхность тестирования и интеграции Лиспекса.
Что такое Лиспекс
Лиспекс — специализированный Лисп для правил принятия решений, спроектированный близким к Scheme. Один вход даёт один детерминированный ответ. Одно и то же правило с одним и тем же входом всегда даёт один и тот же результат.
Запрос приходит списком именованных полей, и любой ответ, включая отказ, тоже возвращается списком. Это отдельный от Топаза язык со своей документацией и своей схемой версий. Подробности вы найдёте на сайте Лиспекс.
Какой путь выбрать
- Чтобы встроить правила Лиспекса в собираемое приложение, перейдите в раздел Запуск правил Лиспекса.
- Чтобы вычислить отдельное правило без пакета, используйте
topaz lispex embed run. - Для выпуска приложения на Топазе выберите одну из поддерживаемых целевых платформ Топаза.
- Чтобы понять назначение LIT, рассматривайте его как свидетельство совместной работы компонентов инструментария на крупной программе Лиспекса.
- Чтобы использовать Лиспекс как самостоятельный продукт, обратитесь к его документации. Здесь описана граница интеграции со стороны Топаза.
Выполните запрос с заданными лимитами ресурсов
Подготовьте стандартный файл правила на Лиспексе, канонический входной файл lispex.embed-value/v1 и закрытый файл лимитов. Затем укажите новый каталог для результатов:
topaz lispex embed run \
--source rule.lspx \
--input value.lpxvalue \
--limits limits.json \
--output lispex-resultДокумент лимитов должен иметь приведённую ниже структуру. Значения можно уменьшать, но добавлять или удалять поля нельзя.
{
"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": 1000000,
"logical_allocation": 1000000,
"semantic_frames": 1000,
"traversal_depth": 256,
"output_bytes": 1000000,
"diagnostic_bytes": 1000000,
"transcript_bytes": 1000000,
"transcript_events": 100,
"result_bytes": 1000000
}
}При успешном выполнении каталог lispex-result содержит файлы result.lpxvalue и report.json. В случае детерминированной семантической ошибки или превышения лимита формируется только отчёт. При отклонении запроса или ошибке движка каталог не создаётся. Проверить конкретный компонент и политику без запасного варианта можно командой:
topaz lispex embed info --jsonКоманда использует фиксированные компонент, профиль, среду выполнения и маршрут. Поиск и загрузка компонентов, обратные вызовы и резервные маршруты отсутствуют. Отчёт фиксирует выполнение и допуск Топаза, а переносимые ядра в формате Лиспекса создаёт API артефактов приложения.
Что означают свидетельства LIT
Одна и та же эталонная версия исходного кода LIT исполняется напрямую, через сгенерированные программы на Rust и Python, а также в браузере. Эта комплексная программа позволяет выявлять дефекты проверки, генерации кода, среды выполнения и взаимодействия с окружением.
Успешная запись LIT указывает программу, маршруты выполнения, входные данные и наблюдаемые результаты. Неподдерживаемые операции возвращают явную ошибку. Все четыре маршрута используют одну линию исходного кода и выявляют регрессии проверки, генерации, среды выполнения и границ хоста.
Граница продукта
Установленный вычислитель обрабатывает через topaz lispex embed документированные компонент, профиль, входные файлы, лимиты ресурсов и контракт результата. Выбор цели Топаза остаётся отдельной поверхностью: --target lispex и --target lit отклоняются до записи артефакта. LIT входит в систему тестирования и интеграции репозитория и находится вне установленного пакета.
Использование Лиспекса в приложении на Топазе
Пакет связывает именованные правила Лиспекса с вычислителем полного текущего профиля, исходным кодом, лимитами ресурсов и встроенным компонентом. Сборка с lock-файлом подготавливает каждое правило один раз и формирует std.lispex вместе с std.lispex.rules. Код на Топазе работает с непрозрачными типами правил и значений вместо необработанных дескрипторов Wasm. Для каждого вычисления создаются новые память гостя, глобальное состояние, счётчик и буфер транскрипта; квоты приложения, отмена и очистка охватывают лимиты вызова.
Если достаточно типизированного результата, используйте evaluate. Для детерминированного результата с переносимой записью предназначена функция evaluateWithEvidence. Метод consumerArtifactBytes сохраняет запись, consumerArtifactFromBytes принимает её обратно только после проверки, а inspectConsumerArtifact и verifyConsumerArtifact возвращают стабильный идентификатор. portableCoreBytes извлекает точные байты ядра в формате Лиспекса при его наличии. freshReplay повторно вычисляет правило и входные данные с лимитами из записи в новом гостевом экземпляре, принимая только полностью совпавший артефакт.
Ядро и внешний артефакт формируются на стороне потребителя и не аутентифицированы. Они не содержат сведений об издателе, одобрении поставщика, полномочиях подписи, допуске компонента или разрешениях на внешние действия. Локальный предварительный отказ, отмена, отклонение очередью, раннее срабатывание защитного лимита и сбой движка не приводят к созданию переносимого ядра.
Приложение полного текущего профиля работает в интерпретаторе и сгенерированных продуктах на всех пяти нативных релизных платформах. Установленный пакет поддерживает установку через npm, удаление исходного кода и компилятора, перенос исполняемого файла, обработку нескольких входов, отказ при превышении лимитов ресурсов, восстановление после дедлайна, проверку артефактов и повторное выполнение в новом экземпляре. Маршруты Python, Web, HTTP-сервиса, no-capability и MCP с пустым набором компонентов отклоняются до записи артефакта или выполнения. Маршрут совместимости с Топазом 5.18 остаётся доступным через профиль совместимости embedded-core со своими идентификаторами компонента, профиля, контракта и подготовленного артефакта.
Последовательность от манифеста, правила, лимитов ресурсов и lock-файла до сборки, запуска, артефакта и повторного вычисления описана в разделе Запуск правил Лиспекса. LIT служит поверхностью тестирования и интеграции Лиспекса, а руководство создаёт приложение принятия решений на Лиспексе с полным текущим профилем.