인터롭

Rust 백엔드

검사된 토파즈 패키지 하나를 관리형 플랫폼 실행 제품으로 만들고 토파즈 소스 트리 없이 실행합니다.

빌드 머신의 운영체제와 아키텍처에서 실행할 플랫폼 실행 파일 하나가 필요하다면 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입니다.

TOPAZ
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입니다.

TOPAZ
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)
}

토파즈 소스 검증하기

패키지를 검사하고 선택 테스트를 실행한 뒤 기준 출력을 확인합니다.

BASH
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을 사용합니다.

BASH
topaz emit --target rust --root . --locked --out-dir ../dist/rust-source

관리형 플랫폼 실행 제품은 build로 만듭니다.

BASH
topaz build --target native --root . --locked --out-dir ../dist/native

build --target rust는 올바른 명령이 아닙니다. rustemit 대상이고 nativebuild로 만드는 배포 대상입니다.

관리형 제품 확인하기

기본 디버그 빌드에는 다음 파일이 있습니다.

출력
dist/native/
├── GENERATED-OUTPUT-NOTICE.txt
├── LICENSE
├── NOTICE
├── target
│   └── debug
│       └── program[.exe]
└── topaz-artifact.json

topaz-artifact.json에는 native 대상, OS·아키텍처 실행 요구 사항, 실행 명령, 모든 관리 파일의 크기와 SHA-256이 기록됩니다. 토파즈는 산출물 명세를 마지막에 쓰며, 변경된 관리 파일, 안전하지 않은 충돌, 같은 출력 디렉터리의 다른 대상을 거부합니다.

토파즈 소스를 사용할 수 없는 곳에서 실행하기

dist가 패키지 밖에 있으므로 원본 패키지를 옮긴 뒤 제품만 실행합니다.

BASH
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 도구 모음이 없거나 호환되지 않으면 빌드 머신을 고친 뒤 다시 빌드합니다.
  • --releasetarget/release/program[.exe]를 만들며 빌드 프로필만 바꿉니다.
  • 기본 코드 생성은 값을 감싸는 공통 Rust 실행 환경을 사용합니다. 선택적인 --backend native는 입증된 영역만 특수화하고 지원하지 않는 형식은 추측하지 않고 공통 값 표현으로 유지합니다.
  • 플랫폼 실행 파일을 다른 OS나 아키텍처에 복사한 뒤 지원되는 배포라고 부르면 안 됩니다.

정확한 경계

생성 Rust와 실행 환경 묶음은 교체 가능한 산출물이며, 손으로 확장하는 API나 소스 수준 Rust FFI가 아닙니다. 성공한 실행은 이 대상에서 이 프로그램의 출력과 종료 코드에 관한 증거로 다룹니다. 사용자가 작성한 래퍼는 별도의 호스트 코드 계약에 따라 검토합니다.

상호 운용 개요, Python 백엔드, 인터프리터와 백엔드, 산출물과 배포로 이어서 살펴보세요.