JavaScript, Python, Rust, 예전 토파즈 초안에서 본 듯한 문법을
topaz check가 거부할 때 이 페이지를 보세요. 익숙한 표기라고 해서
두 번째 방언으로 받아 주지는 않습니다. 대개는 뜻이 같은 현재 표기가 따로
있습니다. 바꿔 쓸 표기가 없다면 그 기능은 일부만 지원되는 것이 아니라
아예 쓸 수 없는 상태입니다.
현재 형식을 쓴 프로그램 검사하기
다음 코드를 forbidden-deferred.tpz로 저장하세요.
let mut count = 0
let values: Array<int> = [1, 2]
let transform: (int) -> int = value => value + 1
match values {
case [head, ..tail] => {
count = transform(head) + tail.length
}
case [] => {
count = 0
}
}
print("{count}")검사하고 실행합니다.
topaz check forbidden-deferred.tpz
topaz run forbidden-deferred.tpz
출력은 다음과 같습니다.
3이 프로그램 하나로 현재의 바인딩 순서, 이름 있는 컬렉션 타입, 호출 가능 타입, 람다, 리스트 나머지 패턴을 한꺼번에 확인할 수 있습니다.
표기만 현재 형식으로 바꾸기
| 시도한 표기 | 대신 쓸 표기 |
|---|---|
mut let count = 0 | let 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} 보간 |
문자열 인덱싱 또는 .length | text.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식 메서드 블록도
마찬가지입니다. 생성 대상 하나가 표현할 수 있다는 이유만으로 토파즈
표기가 되지는 않습니다.
현재 표면을 빠르게 훑어보려면 문법 한눈에 보기를 보세요. 연산자를 바로잡을 때는 연산자와 표현식을 보세요. 프로그램 구조는 모듈과 가시성에서 확인하세요.