Выберите среду выполнения программы и команду, которая создаст нужные файлы. Для компьютера или сервера используйте нативный исполняемый файл, а для вызовов из JavaScript в браузере или Worker используйте пакет WASM.
Сначала установите CLI Топаза. Для сборки нативных продуктов и WASM также нужны Rust и Cargo. Для WASM требуется цель Rust wasm32-unknown-unknown.
Выберите по задаче
| Задача | Команда или параметр | Результат и полный пример |
|---|---|---|
| Запустить исходный код при разработке | topaz run | Вывод интерпретатора в терминале. См. Первую программу |
| Развернуть на компьютере или сервере | topaz build --target native | Исполняемый файл для сборочной машины. См. Бэкенд Rust |
| Вызвать экспортированные функции из JavaScript | topaz build --target web | WASM, модуль JavaScript и объявления типов. См. WASM и песочницу |
| Выполнять вызовы вне главного потока браузера | topaz build --target web-worker | Файлы Web и модули запросов и ответов Worker. См. WASM и песочницу |
Приложение JavaScript задаёт интерфейс и разрешения для продуктов Web и Worker. При развёртывании копируйте весь каталог сборки.
Цель вывода и внутреннее преобразование кода
Цель вывода определяет, где будет работать программа. --target native создаёт исполняемый файл. --target web и --target web-worker создают пакеты WASM.
Внутреннее преобразование кода (lowering) переводит проверенную программу в код, исполняемый бэкендом. По умолчанию выбран компилятор Топаза, написанный на Топазе. Он создаёт нативные исполняемые файлы с параметром --target native. Параметр специализации --backend native он отклоняет как неподдерживаемую операцию.
Для проверки эталонного компилятора параметры --compiler rust --backend native выбирают компилятор на Rust и его стратегию специализации. Он специализирует подходящие скалярные операции и поддерживаемые операции Bytes и ByteBuffer. Остальные операции сохраняют общее представление значений с информацией о типе во время выполнения (boxed). При этом выбранная цель вывода сохраняется.
Для изучения преобразования добавьте --native-report-json <path> к emit или build эталонного компилятора с этими двумя параметрами. Отчёт JSON содержит решения native, hybrid и boxed. Запись отчёта не меняет байты продукта. Команды для изучения компилятора приведены в разделе Состояние инструментария.
Обработайте неподдерживаемые операции
Все цели используют общие проверки синтаксиса, модулей и типов. Каждая цель также проверяет поддержку операций своей средой выполнения. Если поведение операции нельзя сохранить, генерация кода сообщает её положение в исходнике и останавливается до записи артефакта. Исправьте операцию или выберите среду, которая её поддерживает.
Например, интерпретатор, сгенерированный Rust, Web, Worker и песочница поддерживают DEFLATE с фиксированными кодами Хаффмана, фиксированный zlib и защиту RS(255,223). Эти операции дают детерминированные результаты. Параллельные задачи могут выполняться в разном порядке, поэтому не полагайтесь на порядок, наблюдаемый в одном бэкенде.
Сгенерированный Rust и интеграционные тесты
Сгенерированный Rust и файлы среды выполнения можно создать заново. Сохраняйте изменения приложения в исходном коде Топаза. Созданные файлы не предоставляют стабильный API для ручных расширений и не добавляют синтаксис Rust в Топаз. Требования к сборке и условия интеграции приведены в разделе Бэкенд Rust.
LIT представляет собой интерпретатор Лиспекса для интеграционных тестов. Он выполняет один и тот же исходный код Топаза напрямую, через сгенерированный Rust и через Web. Записи содержат программу, пути выполнения, входные данные и результаты. Инструкции приведены в разделе Вычислитель Лиспекса и LIT. LIT служит тестовой программой и не выбирается как цель вывода.