В Топазе используется один проверяемый исходный язык и несколько путей выполнения или поставки. Выбирайте путь исходя из среды, в которой будет работать готовая программа.
Выбор по продукту
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 в полноценный статический продукт.
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-productweb-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 не является поставляемой целью Топаза и не доказывает эквивалентность всего языка.