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

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

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

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

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

  • 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-in-Topaz) — ограниченная поверхность интеграции Лиспекса и внутренней проверки. Один исходный код интерпретатора, написанный на Топазе, проходит через несколько маршрутов Топаза, но LIT не является поставляемой целью Топаза и не доказывает эквивалентность всего языка.

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