Topazdocs
인터롭과 마이그레이션

v5 이전 문법에서 이전

예전 Topaz 코드를 현재 문법과 API로 옮기는 실전 안내.

예전 문서의 표기는 현재 호환성을 보장하지 않습니다. 마이그레이션의 목표는 예전 프로그램의 의도와 결과를 유지하면서 현재 문법으로 다시 쓰는 것입니다.

주요 문법 대응표

예전 표기현재 표기이유
mut let xlet mut x가변성은 let 뒤에 적습니다.
[T]Array<T>컬렉션 타입을 명시합니다.
function(T) -> U(T) -> U함수 타입은 선언 문법과 구분합니다.
[head, ...tail][head, ..tail]패턴의 나머지는 ..를 사용합니다.
args: ...T...args: T가변 매개변수 표기를 하나로 통일합니다.
익명 function(x: T) => expr익명 함수는 람다로 적습니다.
s[i], s.lengths.scalars(), 명시적 문자열 API문자열은 바이트 배열로 취급하지 않습니다.
백틱, ${expr}큰따옴표, {expr}Topaz 문자열 보간 표기를 사용합니다.

1. 실행 결과부터 기록하기

진입 파일, 모듈 루트, 입력, 출력, 예상하는 실패, 파일·네트워크 효과를 먼저 적어 두세요. 예전 페이지에 Rust나 JavaScript 표기가 섞여 있다면 Topaz 소스와 외부 언어 예제를 먼저 분리합니다.

2. 오류와 값 없음을 구분하기

복구 가능한 실패는 Result, 값이 없을 수 있는 상태는 Option이나 null을 포함한 타입, 계속 실행할 수 없는 상태는 실행 오류로 나눕니다. 자원 정리는 defer나 허용된 using 형식으로 옮깁니다.

3. 모듈 구조를 현재 규칙으로 맞추기

import/export 형식, 모듈 경로, 가시성, 초기화 순서를 모듈과 가시성을 기준으로 다시 정리합니다. 외부 언어 코드는 Topaz 모듈 안에 넣지 말고 빌드나 변환 경계에 둡니다.

4. 검사하고 다시 실행하기

topaz check --language-version 5.6 main.tpz
topaz run main.tpz

검사가 통과하면 기록한 입출력과 오류 경로를 run으로 다시 확인합니다. 배포할 Rust·Python·웹 타겟이 있다면 해당 타겟을 따로 빌드해 같은 결과를 내는지 확인합니다.

예전 코드 예시

mut let names: [string] = ["Ada"]
let first = names[0]

현재 형식은 가변성, 컬렉션 타입, 범위 밖 조회를 명시합니다.

TOPAZ
let mut names: Array<string> = ["Ada"]
let first: Option<string> = names.get(0)
print("{first}")

이어서 읽기