예전 문서의 표기는 현재 호환성을 보장하지 않습니다. 마이그레이션의 목표는 예전 프로그램의 의도와 결과를 유지하면서 현재 문법으로 다시 쓰는 것입니다.
주요 문법 대응표
| 예전 표기 | 현재 표기 | 이유 |
|---|---|---|
mut let x | let 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.length | s.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}")