Песочница

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

Одну программу могут выполнить четыре движка: встроенный эталонный маршрут и три явно выбираемых маршрута Native.

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

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

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

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

SH
lispex rule.lspx

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

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

Браузерная Песочница, пакет npm и загружаемая программа Native являются продуктами Лиспекса. Маршрут обозначает движок, выполняющий программу внутри продукта. Песочница и npm используют маршрут tree, а Native поддерживает все четыре маршрута.

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

  1. Дерево. Встроенный интерпретатор, который читает исходный текст напрямую и сразу вычисляет его. Всегда доступен, подготовка не нужна.

  2. Виртуальная машина Rust. Тоже встроена. Виртуальной машиной называют программу, исполняющую заранее подготовленные инструкции вместо исходного текста. Native создаёт такие инструкции из вашего исходного текста, каждый раз записывая их одинаково, и проверяет их перед запуском. Этот маршрут запрашивается явно с помощью --engine vm. Топаз это отдельный от Лиспекса язык со своим компилятором. Два маршрута ниже заимствуют эти инструменты. Правило Лиспекса записывается на Топазе, а затем выполняется или компилируется стороной Топаза, поэтому здесь заимствуется набор инструментов, а не смешиваются языки.

  3. Виртуальная машина Топаза. Точная виртуальная машина Топаза 5.11, установленная отдельным продуктом на macOS ARM64. Вы передаёте Native-команде точный абсолютный путь к продукту.

  4. Сборка заранее, или AOT. Исполняемый файл, собранный из вашей программы заранее, которому потом не нужны исходники. Для сборки нужны точный установленный компилятор Топаза и каталог инструментов Rust. Готовый продукт затем работает без всякого дерева исходников.

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

Два правила идентичности маршрута

Два правила сохраняют идентичность производителя каждого результата.

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

Сохраняйте выбранный движок. Каждый запуск записывает запрошенный маршрут в результате или ошибке. Результат виртуальной машины Топаза содержит точную идентичность продукта этой виртуальной машины.

Вместе эти правила точно называют маршрут, который создал ответ.

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

После установки точной виртуальной машины Топаза и сборки соответствующего заранее собранного продукта 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

Команда принимает оба точных внешних продукта. Отчёт фиксирует наблюдения четырёх маршрутов вместе с исходником, вводом, набором продуктов и профилем ресурсов.

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

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

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

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

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

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

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

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