Инструменты и выполнение

Интерпретатор и бэкенды

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

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

Выбор по продукту

  • topaz run непосредственно запускает интерпретатор во время разработки.
  • Обычная команда build создаёт платформенный исполняемый файл.
  • --target python создаёт пакет, который запускается на Python 3.11 или новее без исходников .tpz и CLI Топаза.
  • --target web подходит, если существующая среда модулей ES вызывает выбранные экспорты Топаза.
  • --target web-worker добавляет созданный транспорт Worker для такой среды.
  • Пакетная цель web-app нужна, когда Топаз владеет жизненным циклом браузера и интерфейсом.
  • Пакетная цель http-service создаёт один ограниченный обработчик HTTP/1.1.

Raw Web и Worker являются продуктами WASM, а управляемое Web Application включает ту же проверенную оболочку Raw Web в полный статический продукт.

BASH
topaz run main.tpz
topaz build main.tpz --out-dir native-product
topaz build --target python --root my-app --locked --out-dir python-product
topaz build main.tpz --target web --out-dir web-product
topaz build main.tpz --target web-worker --out-dir worker-product

web-app и http-service — пакетные цели, выбираемые через [build].target в topaz.toml.

Цель и способ генерации — разные решения

--target выбирает продукт. --backend native выбирает необязательную стратегию специализации внутри продуктов на основе Rust. Сначала она пробует специализировать подходящие скалярные вычисления и ограниченные операции Bytes или ByteBuffer; неподдерживаемые формы остаются на общем пути с упакованными значениями. Эта настройка не превращает Python-продукт в платформенный исполняемый файл и не меняет цель браузерного продукта.

Если решение важно, к проверенной команде emit или build с этой стратегией можно добавить --native-report-json <path>. Отчёт показывает, какие функции полностью или частично специализированы, а какие оставлены на общем пути с упакованными значениями, не меняя байты продукта.

Явный отказ на границе цели

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

Например, детерминированное сжатие DEFLATE с фиксированными кодами Хаффмана, фиксированный zlib и защита RS(255,223) доступны в интерпретаторе, созданном Rust, Raw Web, Worker и песочнице, но созданный Python отклоняет их до записи артефакта. Hash.crc32 доступен и в Python.

Порядок выполнения параллельных задач намеренно не определён. Программа не должна зависеть от конкретного чередования, выбранного механизмом выполнения.

Границы Rust, Python и LIT

Созданные Rust и Python — артефакты поставки, а не дополнительный синтаксис Топаза или стабильный API для ручного редактирования. Отдельные страницы симметрично описывают требования, файлы среды выполнения и явные исключения.

LIT — ограниченная поверхность интеграции Lispex и внутренней проверки. Один написанный на Топазе исходник интерпретатора проходит через несколько маршрутов Топаза, но LIT не является поставляемой целью Топаза и не доказывает эквивалентность всего языка.

Связанная документация