학습 계획 패키지를 네이티브 실행 파일로 빌드하고 소스 폴더 밖에서 실행하세요. 빌드 대상 OS와 아키텍처에서는 토파즈나 Cargo를 설치하지 않아도 실행할 수 있습니다.
패키지 준비하기
첫 애플리케이션의 topaz.toml, topaz.lock, tests/plan.tpz까지 완성하세요. 빌드할 컴퓨터에 호환되는 Rust 툴체인과 Cargo를 설치하세요. 이 페이지의 명령은 study-plan에서 실행합니다.
기본 컴파일러는 토파즈로 작성했습니다. 이 컴파일러가 Rust 코드를 생성하고 Cargo가 실행 파일을 빌드합니다. 애플리케이션은 계속 토파즈 문법으로 작성합니다.
같은 애플리케이션 소스 사용하기
첫 애플리케이션의 두 모듈을 사용합니다. 첫 파일은 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검사는 코드 0으로 종료합니다. 테스트는 tests/plan.tpz: test-ok를 출력합니다. 패키지를 실행하면 다음 줄을 출력합니다.
tasks=2, remaining=25 minutes진단이 나오면 표시된 소스 줄을 고치세요. 테스트가 실패하면 tests/plan.tpz의 예상 결과와 src/plan.tpz를 비교하세요. --locked가 패키지 설정 변경을 보고하면 topaz.toml을 검토하고 패키지와 배포에 따라 잠금을 갱신하세요.
생성 소스 살펴보기와 실행 파일 만들기
생성된 Cargo 소스 파일을 검토하거나 연동하려면 emit을 사용하세요.
topaz emit --target rust --root . --locked --out-dir ../dist/rust-source../dist/rust-source에 생성 Rust 소스와 런타임 파일을 씁니다. 배포할 실행 파일을 만들려면 build를 사용하세요.
topaz build --target native --root . --locked --out-dir ../dist/nativerust는 emit에서 소스를 생성할 때 고르는 대상입니다. build의 실행 파일 대상은 native이므로 build --target rust는 거부됩니다.
출력 폴더 확인하기
기본 디버그 빌드는 다음 파일을 만듭니다.
dist/native/
├── GENERATED-OUTPUT-NOTICE.txt
├── LICENSE
├── NOTICE
├── target
│ └── debug
│ └── program[.exe]
└── topaz-artifact.jsontopaz-artifact.json은 native 대상, 필요한 OS와 아키텍처, 빌드 명령, 관리 파일별 크기와 SHA-256 해시를 기록합니다. 토파즈는 이 파일을 마지막에 씁니다. 관리 파일 수정, 위험한 경로 충돌, 같은 폴더의 다른 출력 대상이 있으면 재빌드를 거부합니다. 복구 방법과 함께 보관할 파일은 아티팩트와 배포에서 확인하세요.
소스 폴더 밖에서 실행하기
dist는 study-plan 밖에 있습니다. source-unavailable이 이미 있으면 다른 이름을 고른 뒤 패키지 이름을 바꾸고 실행 파일을 실행하세요.
cd ..
mv study-plan source-unavailable
./dist/native/target/debug/programPowerShell에서는 Rename-Item study-plan source-unavailable로 이름을 바꾸고 .\dist\native\target\debug\program.exe를 실행하세요. 프로그램은 tasks=2, remaining=25 minutes를 출력하고 코드 0으로 종료합니다. 소스는 나중에 수정할 수 있도록 source-unavailable에 남습니다.
빌드와 배포 문제 해결하기
| 상황 | 할 일 |
|---|---|
| Cargo가 없거나 호환되지 않음 | 빌드할 컴퓨터의 Rust 툴체인을 고친 뒤 다시 빌드 |
| 릴리스 빌드가 필요함 | --release 추가. 토파즈 동작은 그대로이며 실행 파일 경로는 target/release/program[.exe] |
기본 컴파일러에 --backend native를 지정함 | 실행 파일을 만들려면 --target native 사용. 기본 컴파일러는 특수화 옵션을 지원하지 않는 연산으로 거부 |
| 네이티브 특수화를 검증하려 함 | --compiler rust --backend native로 참조 컴파일러 선택. 인터프리터와 백엔드 참고 |
| 배포할 곳의 OS나 아키텍처가 다름 | 배포 환경과 일치하는 지원 플랫폼용으로 빌드 |
생성 코드 연동하기
생성 Rust와 런타임 파일은 재생성하면 교체할 수 있으므로 애플리케이션 수정은 .tpz 소스에 남기세요. 생성 파일은 안정된 수동 확장 API나 소스 수준 Rust FFI를 제공하지 않습니다. 직접 작성한 래퍼의 호스트 동작과 권한은 별도로 테스트하세요. 연동한 뒤에는 사용할 대상에서 프로그램의 출력과 종료 코드를 비교하세요.
리스펙스 결정 애플리케이션은 빌드 전에 리스펙스 규칙 실행하기를 완성하세요. 다섯 네이티브 릴리스 대상 모두 이 애플리케이션을 지원합니다. 다른 빌드 대상은 산출물을 쓰기 전에 이 리스펙스 프로필을 거부합니다. 기존 토파즈 5.18 패키지는 embedded-core 호환 프로필을 사용합니다.
상호 운용 개요, 인터프리터와 백엔드, 아티팩트와 배포로 이어가세요.