Песочница

Вычисление недоверенного правила

Выберите движок Native, который выполняет одно правило в объявленных вами пределах, в варианте restricted или для всего текущего профиля, примените раздельные детерминированные лимиты и проверьте переносимое ядро, которое держит вместе правило, его ввод, его пределы и его результат.

Выберите продукт, который работает в объявленных пределах

Обычная команда lispex rule.lspx использует встроенный интерпретатор, который просто читает исходник и покрывает весь профиль. Команда lispex embed нужна, когда правило должно выполняться в меньшем профиле lispex/r7rs-rule-embedded-core/1 с детерминированными лимитами работы и логического выделения.

Продукт Native в варианте restricted содержит один точный движок WebAssembly, который выполняет правило и ничего не берёт извне. Нельзя передать путь к другому движку, обнаружить или скачать замену либо запросить запасной путь.

На странице загрузок также доступны точный lispex-embed-evaluator.wasm, манифест компонента, эталонные векторы и соответствующие файлы контрольных сумм SHA-256 для приложений, которые напрямую потребляют байты поставщика.

Явно выберите отдельный компонент полного профиля

Если правилу нужен весь lispex-profile-1.5, используйте lispex embed full. Подготовленные файлы и файлы результата используют .lpxfull, а те же пять операций находятся под собственным явным именем команды.

SH
lispex embed full prepare --source policy.lspx --limits prepare-limits.json --out policy.lpxfull
lispex embed full evaluate --prepared policy.lpxfull --input input.lpxvalue --limits evaluation-limits.json --out result.lpxfull
lispex embed full inspect --artifact result.lpxfull
lispex embed full verify --artifact result.lpxfull
lispex embed full replay --artifact result.lpxfull

Это второй точный компонент, который ничего не берёт извне, с идентификаторами lispex/r7rs-rule-current-profile-bounded/1 и lispex-full-vm-meter/1. Он покрывает созданный закрытый список из 205 строк и создаёт новый экземпляр для каждой операции. Он не переименовывает и не расширяет компонент restricted. Страница загрузок отдельно предоставляет Wasm полного профиля, манифест, векторы поставщика, пакет для распространения и контрольные суммы.

1. Подготовьте правило

Создайте prepare-limits.json.

JSON
{
  "raw_source_bytes": 4096,
  "prepare_work": 1000000,
  "logical_allocation": 1000000,
  "syntax_depth": 64
}

Подготовьте исходный текст.

SH
lispex embed prepare \
  --source policy.lspx \
  --limits prepare-limits.json \
  --out policy.lpxembed

Подготовка принимает UTF-8, читает и нормализует программу, создаёт и проверяет байткод в единственном допустимом виде и проверяет ограниченный профиль. Она записывает идентичности представленного исходника, исходника в допустимом виде, семантического правила, набора возможностей, байткода, программы, которая выполняет правило, и точных лимитов, но не выполняет правило.

2. Выполните подготовленное правило

Вход представляет собой одно значение lispex.embed-value/v1 в допустимом виде. Создайте evaluation-limits.json.

JSON
{
  "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
}

Выполните именно этот подготовленный артефакт.

SH
lispex embed evaluate \
  --prepared policy.lpxembed \
  --input input.lpxvalue \
  --limits evaluation-limits.json \
  --out result.lpxembed

Расход подготовки никогда не входит в расход вычисления. Поэтому повторное использование подготовленного артефакта не меняет ни начисляемую за вычисление стоимость, ни переносимое ядро. Переносимое ядро представляет собой ту часть, которая держит вместе правило, его ввод, его пределы и его результат.

3. Просмотрите и проверьте

SH
lispex embed inspect --artifact result.lpxembed
lispex embed verify --artifact result.lpxembed

inspect показывает стабильную JSON-проекцию. verify без запуска правила пересчитывает конверт, точные хэши, категорию, лимиты и переносимое ядро. Эти команды не удостоверяют издателя и не создают полномочий Ваучера.

Сначала прочитайте категорию

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

Израсходованная работа полезна как локальная диагностика, но не входит в переносимое ядро. Ядро связывает точные лимиты, профиль, модель, исходник, вход, запрос, артефакт программы, которая выполняет правило, запись хода выполнения и идентичности результата.

Границы

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

Это дают Native и отдельный пакет движка. npm, публичная браузерная обёртка WebAssembly, Песочница и встраивание в браузер этого не дают. Побочные каналы по времени, по кэшу и по микроархитектуре находятся вне технической гарантии. Выживание процесса-хоста в первом выпуске, работающем внутри одного процесса, является операционной целью, а не гарантией безопасности.

Артефакт и ядро являются материалом для проверки. Они не являются подписью Ваучера, аутентифицированным свидетельством, результатом проверки допуска, доказательством правильности правила или разрешением на внешнее действие.

Дальше

Точные ID, оси, категории и контракт пакета для небольшого движка, который выполняет одно правило в объявленных вами пределах, описаны в контракте ограниченного вычислителя.