빌드 머신의 운영체제와 아키텍처에서 실행할 플랫폼 실행 파일 하나가 필요하다면 Rust 경로를 고릅니다. 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 StudyTask {
title: string,
minutes: int,
done: bool = false,
}
function parseMinutes(text: string) -> Result<int, string> {
match toInt(text) {
case Some(value) if value > 0 => Ok(value)
case _ => Err("minutes must be a positive integer")
}
}
export function makeTask(
title: string,
minuteText: string,
done: bool = false,
) -> Result<StudyTask, string> {
let minutes = parseMinutes(minuteText)?
Ok(StudyTask { title: title, minutes: minutes, done: done })
}
export function summarize(tasks: Array<StudyTask>) -> string {
let mut remaining = 0
for task in tasks {
if !task.done {
remaining = remaining + task.minutes
}
}
"tasks={tasks.length}, remaining={remaining} minutes"
}패키지 진입점 src/main.tpz입니다.
import src.plan { StudyTask, makeTask, summarize }
export function main(args: Array<string>, stdin: string) -> Result<int, string> {
let tasks: Array<StudyTask> = [
makeTask("Run first program", "10", true)?,
makeTask("Build application", "25", false)?,
]
print(summarize(tasks))
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 minutes검토에는 emit, 배포에는 build
생성 Cargo 소스 세트를 살펴보거나 통합해야 할 때만 emit을 사용합니다.
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 대상, OS·아키텍처 실행 요구 사항,
실행 명령, 모든 관리 파일의 크기와 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는 입증된 영역만 특수화하고 지원하지 않는 형식은 추측하지 않고 공통 값 표현으로 유지합니다. - 플랫폼 실행 파일을 다른 OS나 아키텍처에 복사한 뒤 지원되는 배포라고 부르면 안 됩니다.
정확한 경계
생성 Rust와 실행 환경 묶음은 교체 가능한 산출물이며, 손으로 확장하는 API나 소스 수준 Rust FFI가 아닙니다. 성공한 실행은 이 대상에서 이 프로그램의 출력과 종료 코드에 관한 증거로 다룹니다. 사용자가 작성한 래퍼는 별도의 호스트 코드 계약에 따라 검토합니다.
상호 운용 개요, Python 백엔드, 인터프리터와 백엔드, 산출물과 배포로 이어서 살펴보세요.