Песочница

Сборка заранее скомпилированного продукта

Сгенерируйте читаемый Топаз, скомпилируйте его точной установленной цепочкой Топаза и запустите Native-продукт Лиспекса без исходников.

Что здесь означает AOT

AOT означает ahead of time, то есть сборку заранее. Native компилирует правило до запуска и создаёт продукт без исходника Лиспекса внутри. Native-конвейер полностью явный.

точный исходник Lispex
  -> lispex.core-ir/v1
  -> lispex.bytecode/v1
  -> читаемый сгенерированный Topaz + source map
  -> точный установленный компилятор Topaz 5.11
  -> topaz.artifact.v1
  -> Native-продукт без исходников

Сгенерированная программа содержит статический граф управления. Во время выполнения она не читает исходник или байткод Лиспекса и не включает виртуальную машину Rust, встроенный интерпретатор, который просто читает исходник, либо отдельную виртуальную машину Топаза.

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

Сохраните refund-window.lspx.

LISPEX
(define (decide days)
  (if (<= days 30) 'refund 'review))

(decide input)

Сохраните datum входа в request.lspx.

LISPEX
14

Явно выберите инструменты сборки

Сборка заранее сейчас доступна только в Native для macOS ARM64. Укажите абсолютные пути к установленному компилятору topaz-lang@5.11.0 и каталогу инструментов Rust.

SH
lispex routes fetch \
  --route aot-compiler \
  --target aarch64-apple-darwin \
  --out /absolute/tools/lispex-aot-compiler

TOPAZ_BIN=/absolute/tools/lispex-aot-compiler/product/bin/topaz-bin
RUST_TOOL_BIN=/absolute/path/to/rustup/bin

Получение проверяет точный закрытый пакет Топаза и манифест выпуска, но не регистрирует и не выбирает компилятор. При сборке Лиспекс снова проверяет компилятор, npm-обёртку, установщик и отдельно переданные прокси Rust. Поиска через PATH, рабочую копию репозитория, сеть, старую цепочку или другой кэшированный продукт нет.

Соберите без перезаписи

SH
lispex aot build \
  --source refund-window.lspx \
  --topaz-compiler "$TOPAZ_BIN" \
  --rust-tool-bin "$RUST_TOOL_BIN" \
  --out refund-window-aot

Каталог назначения не должен существовать. Лиспекс собирает в приватной подготовительной области в заданных пределах и сначала строго проверяет выданный компилятором артефакт Топаза и все управляемые файлы. Затем он удаляет зависящие от пути локальные символы линкера и заменяет подпись линкера одной фиксированной ad-hoc подписью AOT Лиспекса. Манифест продукта записывает точные хеши /usr/bin/strip и /usr/bin/codesign, а итоговый артефакт Топаза заново связывается с финальным исполняемым файлом. Манифест Лиспекса записывается последним, после чего закрытый продукт публикуется атомарно.

Установленный каталог содержит только эти файлы.

lispex-aot-product.json
lispex-source-map.json
topaz-artifact.json
target/debug/program
LICENSE
NOTICE
GENERATED-OUTPUT-NOTICE.txt

Для запуска не нужны ни сгенерированный Топаз, ни исходник Лиспекса.

Проверьте без выполнения

SH
lispex aot inspect --product "$PWD/refund-window-aot"
lispex aot validate --product "$PWD/refund-window-aot"

Обе команды требуют абсолютный корень продукта. Они проверяют закрытый список файлов, идентичности исходника, Core IR, байткода и продукта, карту исходника, точную линию компилятора и macOS-финализации, артефакт Топаза, хеш исполняемого файла, цель и нулевые счётчики запасных путей. Исполняемый файл не запускается.

Запустите установленный продукт

SH
lispex aot run \
  --product "$PWD/refund-window-aot" \
  --input request.lspx

OUTPUT

refund

run повторно проверяет продукт и запускает только записанный исполняемый файл. Он не компилирует и не пробует встроенный интерпретатор, виртуальную машину Rust, виртуальную машину Топаза, парсер байткода, сеть либо другую установку.

Для машинного результата добавьте --json.

SH
lispex aot run \
  --product "$PWD/refund-window-aot" \
  --input request.lspx \
  --json

Результат связывает манифест продукта, исходник, Core IR, байткод, сгенерированный пакет Топаза, карту исходника, артефакт Топаза, исполняемый файл, вход, запрошенные ресурсы, наблюдения и пять нулевых счётчиков запасных путей.

Задайте лимиты ресурсов

SH
lispex aot run \
  --product "$PWD/refund-window-aot" \
  --input request.lspx \
  --machine-transitions 1000000 \
  --output-bytes 1048576 \
  --control-frames 10000 \
  --json

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

Сравните четыре способа выполнения в Native

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

SH
lispex compare-routes \
  --topaz-vm /absolute/path/to/aarch64-apple-darwin \
  --aot-product "$PWD/refund-window-aot" \
  --receipt four-routes.json \
  --input request.lspx \
  refund-window.lspx

Лиспекс один раз читает и нормализует исходник, выводит по одному Core IR и байткоду, доказывает связь предварительно собранного скомпилированного продукта с этими идентичностями, проверяет оба продукта Топаза и запускает каждый из четырёх способов без повторной попытки через другой.

Неперезаписываемая квитанция отделяет семантические оси расхождения от сопоставимых ресурсных осей. Виртуальная машина Rust, виртуальная машина Топаза и скомпилированный продукт используют одну модель стоимости байткода и должны совпасть по переходам, выводу, кадрам управления и завершённым корням. Tree честно объявляет другую модель глубины и не выдумывает отсутствующие счётчики. Код 0 означает завершение всех четырёх способов и совпадение проверенных осей. Код 1 означает расхождение. Код 2 означает ошибку выполнения или продукта. Код 3 означает невозможность опубликовать квитанцию.

Граница безопасности

Скомпилированный исполняемый файл, манифест продукта, карта исходника, отчёты команд inspect, validate или run, а также квитанция четырёх способов имеют статус execution-material-only либо являются локальной диагностикой. Ничто из этого не является свидетельством аутентификации Ваучера, результатом повторного выполнения с привязкой запроса или результатом проверки допуска. Цепочка Ваучера по-прежнему использует точные внешние исходник и вход, а её границу образуют запуск tree, запись смысла и виртуальная машина Rust.

Запуск tree и виртуальная машина Rust остаются независимо выбираемыми путями восстановления. Ошибка скомпилированного продукта видима и не включает другой способ автоматически.

Поддержка продуктов

ПродуктСборкаInspect / validate / run
Native macOS ARM64только точный установленный Топаз 5.11да
Другие Native-целинетнет
npm CLI и пакетявный отказ, только Nativeнет
Открытая сборка WebAssembly, браузер, Worker, Песочницанетнет

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

Запуск проверенного байткода · Native CLI · Среды выполнения и интерпретаторы