Что здесь означает 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.
(define (decide days)
(if (<= days 30) 'refund 'review))
(decide input)Сохраните datum входа в request.lspx.
14Явно выберите инструменты сборки
Сборка заранее сейчас доступна только в Native для macOS ARM64. Укажите
абсолютные пути к установленному компилятору topaz-lang@5.11.0 и каталогу
инструментов Rust.
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, рабочую копию репозитория, сеть, старую цепочку или другой
кэшированный продукт нет.
Соберите без перезаписи
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Для запуска не нужны ни сгенерированный Топаз, ни исходник Лиспекса.
Проверьте без выполнения
lispex aot inspect --product "$PWD/refund-window-aot"
lispex aot validate --product "$PWD/refund-window-aot"Обе команды требуют абсолютный корень продукта. Они проверяют закрытый список файлов, идентичности исходника, Core IR, байткода и продукта, карту исходника, точную линию компилятора и macOS-финализации, артефакт Топаза, хеш исполняемого файла, цель и нулевые счётчики запасных путей. Исполняемый файл не запускается.
Запустите установленный продукт
lispex aot run \
--product "$PWD/refund-window-aot" \
--input request.lspxrefund
run повторно проверяет продукт и запускает только записанный исполняемый
файл. Он не компилирует и не пробует встроенный интерпретатор, виртуальную
машину Rust, виртуальную машину Топаза, парсер байткода, сеть либо другую
установку.
Для машинного результата добавьте --json.
lispex aot run \
--product "$PWD/refund-window-aot" \
--input request.lspx \
--jsonРезультат связывает манифест продукта, исходник, Core IR, байткод, сгенерированный пакет Топаза, карту исходника, артефакт Топаза, исполняемый файл, вход, запрошенные ресурсы, наблюдения и пять нулевых счётчиков запасных путей.
Задайте лимиты ресурсов
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, точной установленной виртуальной машине Топаза и в скомпилированном исполняемом файле.
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 · Среды выполнения и интерпретаторы