프로그램을 어디서 실행할지 정하고 필요한 결과물을 만드는 명령을 고르세요. 데스크톱·서버에는 네이티브 실행 파일을, 브라우저·Worker의 JavaScript 호출에는 WASM 패키지를 사용합니다.
먼저 토파즈 CLI를 설치하세요. 네이티브·WASM 제품을 빌드하려면 Rust와 Cargo도 필요합니다. WASM 빌드에는 Rust의 wasm32-unknown-unknown 대상이 필요합니다.
작업에 맞춰 선택하기
| 할 일 | 명령이나 옵션 | 결과와 전체 예제 |
|---|---|---|
| 개발 중 소스 실행 | topaz run | 인터프리터가 터미널에 결과 출력. 첫 프로그램 참고 |
| 데스크톱·서버 배포 | topaz build --target native | 빌드한 컴퓨터용 실행 파일. Rust 백엔드 참고 |
| JavaScript에서 내보낸 함수 호출 | topaz build --target web | WASM·JavaScript 모듈·타입 선언. WASM과 플레이그라운드 참고 |
| 브라우저 메인 스레드 밖에서 호출 실행 | topaz build --target web-worker | Web 파일과 Worker 요청·응답 모듈. WASM과 플레이그라운드 참고 |
Web과 Worker 제품의 UI와 권한은 JavaScript 애플리케이션에서 마련합니다. 배포할 때는 빌드 출력 폴더 전체를 복사하세요.
출력 대상과 내부 코드 변환 방식
출력 대상은 프로그램을 어디서 실행할지 정합니다. --target native는 실행 파일을 만듭니다. --target web과 --target web-worker는 WASM 패키지를 만듭니다.
내부 코드 변환(lowering)은 검사한 프로그램을 백엔드가 실행할 코드로 바꾸는 과정입니다. 기본 컴파일러는 토파즈로 작성한 토파즈 컴파일러입니다. 이 컴파일러는 --target native로 네이티브 실행 파일을 만듭니다. 특수화 옵션인 --backend native는 지원하지 않는 연산 오류로 거부합니다.
참조 컴파일러를 검증할 때는 --compiler rust --backend native로 Rust 참조 컴파일러와 특수화 방식을 선택합니다. 조건에 맞는 스칼라 연산과 지원되는 Bytes, ByteBuffer 연산을 특수화합니다. 나머지 연산은 실행 중 타입 정보도 함께 저장하는 공통 값 표현(boxed)을 유지합니다. 이 선택은 지정한 출력 대상을 바꾸지 않습니다.
변환 결과를 보려면 두 옵션을 지정한 참조 컴파일러의 emit이나 build에 --native-report-json <path>를 추가하세요. JSON 보고서에는 native, hybrid, boxed 선택이 기록됩니다. 보고서를 써도 제품 바이트는 바뀌지 않습니다. 컴파일러 조사 명령은 툴체인 상태에서 확인하세요.
지원하지 않는 연산 처리하기
모든 출력 대상은 문법·모듈·타입 검사를 공유합니다. 각 대상은 실행 환경에서 지원하는 연산도 검사합니다. 연산의 동작을 유지할 수 없으면 코드 생성이 소스 위치를 보고하고 산출물을 쓰기 전에 멈춥니다. 해당 연산을 고치거나 그 연산을 지원하는 환경을 선택하세요.
예를 들어 인터프리터, 생성 Rust, Web, Worker, 플레이그라운드는 fixed-Huffman DEFLATE, 고정 zlib, RS(255,223) 보호를 지원합니다. 이 연산들은 정해진 입력에서 같은 결과를 만듭니다. 동시 작업은 실행 순서가 달라질 수 있으므로 특정 백엔드에서 관찰한 순서에 의존하지 마세요.
생성 Rust와 통합 테스트
생성 Rust와 런타임 파일은 다시 만들 수 있습니다. 애플리케이션 수정은 토파즈 소스에 남기세요. 생성 파일은 수동 확장용으로 안정된 API를 제공하거나 토파즈에 Rust 문법을 추가하지 않습니다. 빌드 준비와 연동 조건은 Rust 백엔드에서 확인하세요.
LIT는 통합 테스트에 쓰는 리스펙스 인터프리터입니다. 같은 토파즈 소스를 직접 실행하고, 생성 Rust와 Web으로도 실행합니다. 기록에는 프로그램·실행 경로·입력·결과가 들어 있습니다. 사용 방법은 리스펙스 평가기와 LIT에서 확인하세요. LIT는 테스트 프로그램이며 출력 대상으로 선택하지 않습니다.