프로그램 구조

금지·유예 형식

익숙하지만 지원하지 않는 표기를 토파즈의 현재 정본 형식으로 전환하는 지침입니다.

JavaScript, Python, Rust 또는 이전 토파즈 초안에서 접했을 법한 문법을 topaz check가 거부할 때 이 페이지를 참고하세요. 익숙한 표기라는 이유로 대체 방언을 지원하지는 않습니다. 대부분 동등한 의미를 지닌 현재 표기가 따로 존재합니다. 대체 표기가 없는 경우, 해당 기능은 부분 지원이 아니라 사용할 수 없는 상태입니다.

현재 형식을 쓴 프로그램 검사하기

다음 코드를 forbidden-deferred.tpz로 저장하세요.

TOPAZ
let mut 개수 = 0
let 값들: Array<int> = [1, 2]
let 변환: (int) -> int = => + 1

match 값들 {
    case [머리, ..꼬리] => {
        개수 = 변환(머리) + 꼬리.length
    }
    case [] => {
        개수 = 0
    }
}

print("{개수}")

검사를 수행한 뒤 실행합니다.

BASH
topaz check forbidden-deferred.tpz
topaz run forbidden-deferred.tpz

출력은 다음과 같습니다.

출력
3

이 단일 프로그램으로 현재의 바인딩 순서·명명된 컬렉션 타입·호출 가능 타입·람다·리스트 rest 패턴을 한꺼번에 확인할 수 있습니다.

표기만 현재 형식으로 바꾸기

시도한 표기대신 쓸 표기
mut let count = 0let mut count = 0
count++, count--count = count + 1, count = count - 1
타입 자리의 [T]Array<T>
타입 자리의 function(T) -> U(T) -> U
args: ...T...args: T
[head, ...tail][head, ..tail]
익명 function (...) { ... }value => value + 1 같은 람다
백틱 또는 ${value}큰따옴표 문자열과 {value} 보간
문자열 인덱싱 또는 .lengthtext.scalars() 뒤에 Array 연산
async, await그 모델이 맞을 때 명시적인 제한된 concurrent

모듈 import와 export에는 별도의 정해진 형식이 있습니다. 모듈과 가시성의 선택적 import와 선언부 직전 export를 사용하세요. use, 문자열·템플릿 모듈 경로, export 목록, 와일드카드 export, 재공개, export 자리 식별자 변경은 사용할 수 없습니다.

위의 부적절한 표기는 유효한 토파즈 코드가 아니므로 일반 텍스트로만 제공합니다. 백엔드를 선택하기 전에 topaz check를 실행하세요. 공통 검사기가 언어 경계에서 이러한 표기를 거부하므로 생성 타깃이 의도를 자의적으로 해석하지 않습니다.

유예는 출시 약속이 아님

거부된 표기 중 일부는 즉시 대체 표기로 바꿀 수 있습니다. 반면 의미 구조 자체가 현재 언어에 없어서 유예된 표기도 있습니다. 유예 상태가 부분 구현에 의존해도 된다는 의미는 아닙니다. 향후 특정 릴리스에 해당 기능을 추가하겠다는 약속도 아닙니다.

현재 사용할 수 없는 기능 범위에는 문자소 클러스터·문자열 직접 슬라이스·HTML 및 사용자 정의 템플릿 태그·더 넓거나 고차인 제네릭 제약·재귀 타입 별칭·넓은 프로토콜 디스패치·패키지 재공개·일반 iterable 전개·비동기 정리·async/await·실행 오류 포획·panic/throw/catch 키워드·선택적 속성 파이프 약식이 포함됩니다.

&self, &mut self, Vec<T>, use crate:: 같은 Rust 소유권 및 수신자 토큰은 상호 운용성을 명시적으로 다루는 문서에서만 등장합니다. 이는 일반 토파즈 문법이 아닙니다. JavaScript식 레코드 전개나 Rust식 메서드 블록도 마찬가지입니다. 특정 생성 타깃에서 표현할 수 있다는 이유만으로 토파즈의 정식 표기가 되지는 않습니다.

현재 표면 명세를 빠르게 파악하려면 문법 한눈에 보기를 보세요. 연산자 표기를 바로잡을 때는 연산자와 표현식을 보세요. 프로그램 구조는 모듈과 가시성에서 확인하세요.