Выбирайте путь Rust, когда нужен один платформенный исполняемый файл для операционной системы и архитектуры машины сборки. Rust остаётся целью сборки, а его конструкции не становятся синтаксисом Топаза.
Предварительные требования
- Завершите пакет
study-planиз раздела Первое приложение. - Храните вместе
topaz.toml,topaz.lock,src/plan.tpz,src/main.tpzи выбранный тест. - Установите на машине сборки совместимый инструментарий Rust с Cargo.
- Выполняйте следующие команды из каталога
study-plan.
Готовому файлу не нужны Топаз, Cargo или файлы .tpz во время исполнения.
Однако он предназначен для ОС и архитектуры, под которые был собран.
Общий проверяемый пакет
На странице Python используются те же два модуля Топаза. Сначала
src/plan.tpz:
export record УчебнаяЗадача {
название: string,
минуты: int,
выполнена: bool = false,
}
function разобратьМинуты(текст: string) -> Result<int, string> {
match toInt(текст) {
case Some(значение) if значение > 0 => Ok(значение)
case _ => Err("minutes must be a positive integer")
}
}
export function создатьЗадачу(
название: string,
текстМинут: string,
выполнена: bool = false,
) -> Result<УчебнаяЗадача, string> {
let минуты = разобратьМинуты(текстМинут)?
Ok(УчебнаяЗадача { название: название, минуты: минуты, выполнена: выполнена })
}
export function подвестиИтог(задачи: Array<УчебнаяЗадача>) -> string {
let mut осталось = 0
for задача in задачи {
if !задача.выполнена {
осталось = осталось + задача.минуты
}
}
"tasks={задачи.length}, remaining={осталось} minutes"
}Точка входа пакета src/main.tpz:
import src.plan { УчебнаяЗадача, создатьЗадачу, подвестиИтог }
export function main(аргументы: Array<string>, ввод: string) -> Result<int, string> {
let задачи: Array<УчебнаяЗадача> = [
создатьЗадачу("Run first program", "10", true)?,
создатьЗадачу("Build application", "25", false)?,
]
print(подвестиИтог(задачи))
Ok(0)
}Проверьте исходный код Топаза
Проверьте пакет, выполните выбранный тест и зафиксируйте эталонный вывод:
topaz check --root . --locked
topaz test tests/plan.tpz --root . --locked
topaz run --root . --locked
Тест сообщает tests/plan.tpz: test-ok, а запуск выводит:
tasks=2, remaining=25 minutesemit для изучения, build для поставки
Используйте emit, только если нужно изучить или интегрировать созданный набор
исходного кода Cargo:
topaz emit --target rust --root . --locked --out-dir ../dist/rust-source
Управляемый платформенный продукт создаётся командой build:
topaz build --target native --root . --locked --out-dir ../dist/native
build --target rust — неверная команда. rust обозначает цель emit, а
native — поставляемую цель build.
Проверьте управляемый продукт
Обычная отладочная сборка содержит:
dist/native/
├── GENERATED-OUTPUT-NOTICE.txt
├── LICENSE
├── NOTICE
├── target
│ └── debug
│ └── program[.exe]
└── topaz-artifact.jsontopaz-artifact.json записывает цель native, требуемые ОС и архитектуру,
команду запуска, размер и SHA-256 каждого управляемого файла. Топаз записывает
манифест последним и отклоняет изменённый файл, небезопасную коллизию или
другую цель в том же каталоге.
Запустите без доступного исходного кода Топаза
Каталог dist находится вне пакета, поэтому переместите исходный пакет и
запустите только продукт:
cd ..
mv study-plan source-unavailable
./dist/native/target/debug/program
В Windows используйте Rename-Item study-plan source-unavailable, затем
запустите .\dist\native\target\debug\program.exe. Продукт завершается с
кодом 0 и печатает тот же результат.
Восстановление с учётом цели
- Если Cargo отсутствует или несовместим, исправьте машину сборки и повторите команду.
--releaseсоздаётtarget/release/program[.exe]и меняет профиль сборки, а не семантику Топаза.- По умолчанию используется универсальная среда Rust. Необязательный
--backend nativeспециализирует доказанные участки, а остальные сохраняет в универсальном представлении. - Нельзя копировать платформенный исполняемый файл на другую ОС или архитектуру и считать это поддерживаемой поставкой.
Точная граница
Созданный Rust и его среда выполнения — заменяемые артефакты, а не API для ручного расширения или FFI на уровне исходного кода. Считайте успешный запуск свидетельством вывода и кода завершения этой программы на этой цели. Пользовательскую обёртку проверяйте по отдельному контракту кода среды.
Если пакет связывает ограниченные правила Lispex, перед сборкой следуйте руководству Ограниченное приложение решений Lispex. Этот профиль приложения несут только допущенные нативные цели; неподдерживаемый маршрут завершается ошибкой до записи артефакта. Продолжите с границ интеграции, бэкенда Python, интерпретатора и бэкендов или артефактов и развёртывания.