Topaz는 표현식을 중심으로 설계한 정적 타입 언어입니다. 이 페이지에서는 값과 타입, 제어 흐름, 컬렉션, 오류 처리, 리소스, 동시성, 문자열 템플릿, 모듈이 하나의 규칙 안에서 어떻게 연결되는지 살펴봅니다.
정책
프로그램은 선언과 문장의 순서입니다. 표현식은 값을 만들고, 대입과 defer처럼 값을 만들지 않는 형식은 문장으로 분리됩니다. 해석기는 언어 동작의 기준이며 Rust와 Python 백엔드는 같은 검사 결과를 입력으로 사용합니다.
명시된 동작
값은 const, let, let mut로 이름을 붙입니다. 함수는 매개변수와 반환 타입을 적고, 람다는 =>를 사용합니다. if, match, for, loop는 문맥에 따라 값을 만들 수 있습니다. 값 없음은 Option이나 null을 포함한 타입으로, 복구 가능한 실패는 Result와 후위 ?로, 정리 작업은 defer로 표현합니다. 컬렉션은 Array<T>, Map<K,V>, Set<T>를 사용합니다.
제약과 명시적 거부
검사기는 다른 언어의 표기를 Topaz로 추측해 받아들이지 않습니다. async/await, try 표현식, 문자열 인덱싱, JavaScript식 레코드 스프레드, Rust식 수신자 문법, 약식 컬렉션 타입은 사용할 수 없습니다. 모듈도 이 매뉴얼에 적힌 import/export 형식만 허용합니다.
유예 경계
일반 async 문법, 실행 오류 복구, 사용자 정의 템플릿 태그, 그래핀 단위 문자열 API, 임의 반복 가능 값 스프레드, 고위 다형성, 모듈 재공개는 아직 현재 언어에 포함되지 않습니다.
예제
type TrafficLight = "red" | "yellow" | "green"
function instruction(light: TrafficLight) -> string {
match light {
case "red" => "stop"
case "yellow" => "slow"
case "green" => "go"
}
}
let values: Array<int> = [1, 2, 3]
let doubled = for value in values { value * 2 }
print("{instruction("green")}: {doubled}")