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

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

Выберите нативный продукт, Web или Worker и различайте цель вывода и внутреннее преобразование кода.

Выберите среду выполнения программы и команду, которая создаст нужные файлы. Для компьютера или сервера используйте нативный исполняемый файл, а для вызовов из JavaScript в браузере или Worker используйте пакет WASM.

Сначала установите CLI Топаза. Для сборки нативных продуктов и WASM также нужны Rust и Cargo. Для WASM требуется цель Rust wasm32-unknown-unknown.

Выберите по задаче

ЗадачаКоманда или параметрРезультат и полный пример
Запустить исходный код при разработкеtopaz runВывод интерпретатора в терминале. См. Первую программу
Развернуть на компьютере или сервереtopaz build --target nativeИсполняемый файл для сборочной машины. См. Бэкенд Rust
Вызвать экспортированные функции из JavaScripttopaz build --target webWASM, модуль 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 служит тестовой программой и не выбирается как цель вывода.

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