Песочница

Где выполняется ваша программа

У одной программы четыре маршрута выполнения, маршрут по умолчанию не требует подготовки, а остальные являются явным выбором и никогда не подменяют друг друга молча.

Результат: вы сможете назвать четыре маршрута выполнения, объяснить, каким из них пользовались всё это время, и предсказать, что произойдёт, если запрошенный маршрут недоступен.

Что нужно знать заранее: как запустить файл .lspx. Это разбиралось в уроке Первая программа. Для этой страницы ничего нового устанавливать не нужно.

Вы уже пользовались одним из маршрутов

Каждый раз, когда вы запускали программу вот так

SH
lispex rule.lspx

вы использовали интерпретатор дерева. Он встроен в обычный продукт Lispex, написан на Rust и обходит ваш исходный текст напрямую. Это маршрут по умолчанию, семантический эталон и путь восстановления. Если вы никогда не тронете другой маршрут, вы ничего не потеряете. На одном этом маршруте язык полон.

Четыре маршрута

Одну и ту же программу можно выполнить четырьмя способами.

  1. Дерево. Встроенный эталонный интерпретатор. Читает исходный текст и вычисляет его напрямую. Всегда доступен, подготовка не нужна.
  2. Rust VM. Тоже встроен. Выполняет канонический байткод, который Native собирает и проверяет из вашего исходного текста. Запрашивается явно через --engine vm.
  3. Topaz VM. Точная, отдельно установленная виртуальная машина Topaz 5.11 на macOS ARM64. Она не встроена в Native-бинарник. Вы устанавливаете её отдельно и передаёте точный абсолютный путь к продукту нужной команде.
  4. AOT. Исполняемый файл без исходников, собранный из вашей программы заранее. Для сборки нужны точный установленный компилятор Topaz и каталог инструментов Rust. Готовый продукт затем работает без всякого дерева исходников.

Маршрут является реализацией одного языка Lispex, а не диалектом. Маршруты проектируются так, чтобы сохранять один смысл. Команды сравнения проверяют совпадение наблюдений для одного точного запроса; одно совпадение не доказывает одинаковое поведение всех программ повсюду.

Два правила честности

Маршрутам можно доверять благодаря двум правилам, и оба формулируются одной фразой.

Никакого поиска во время выполнения. Команды выполнения, инвентаризации, диагностики и сравнения не ищут маршрут в PATH, рабочей копии, переменных окружения или сети. Внешний маршрут участвует, только когда вы передали его точное расположение. Отдельная команда routes fetch может получить один точный официальный сопутствующий продукт, но не выбирает и не запускает его.

Никакой подмены. Если запрошенный маршрут отказал или отсутствует, запуск останавливается с ошибкой. Он никогда не переключается тихо на другой маршрут. Результат с подписью Topaz VM либо создан Topaz VM, либо не создан вовсе.

Оба правила защищают одно и то же. Если запуск удался, вы точно знаете, какой маршрут дал ответ.

Проверка согласия маршрутов

После установки точной Topaz VM и сборки соответствующего AOT-продукта Native может выполнить один точный запрос на всех четырёх маршрутах и записать один диагностический отчёт без перезаписи.

SH
lispex compare-routes \
  --topaz-vm /absolute/tools/lispex-topaz-vm/product \
  --aot-product /absolute/products/rule-aot \
  --receipt route-comparison.json \
  rule.lspx

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

Попробуйте сами

Допустим, скрипт коллеги запрашивает маршрут Topaz VM, а на машине, где он выполняется, Topaz VM не установлена. Предскажите, что произойдёт, прежде чем открыть ответ.

Показать ответ

Запуск завершится ошибкой с именем отсутствующего маршрута. Подмены на интерпретатор дерева не будет, поэтому ответ с неверной подписью появиться не может. Исправление тоже явное. Либо установите точный сопутствующий продукт и передайте его расположение, либо измените скрипт так, чтобы он запрашивал маршрут, который на этой машине действительно есть.

Когда можно двигаться дальше

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

Когда захотите выбрать маршрут для настоящей работы, продолжите со страницы Выбор среды выполнения. Когда захотите установить сопутствующий продукт, следуйте руководству Установка дополнительных маршрутов.