이 페이지의 예제는 실제 토파즈 도구로 검사하고 실행합니다. 현재 지원 범위는 도구 모음 상태에서 확인할 수 있습니다.
토파즈 설치
저장소를 내려받거나 직접 빌드하지 않고 topaz 명령을 설치할 수 있습니다.
macOS와 Linux 셸:
curl -fsSL https://topaz.ooo/install.sh | shWindows PowerShell:
irm https://topaz.ooo/install.ps1 | iexNode가 설치되어 있다면 npm으로:
npm install -g topaz-lang설치를 확인합니다:
topaz versionTopaz 5.6설치 없이 브라우저에서 바로 토파즈를 써볼 수도 있습니다.
네이티브 빌드에 필요한 준비. topaz run, topaz check, topaz emit은 토파즈만 설치하면 사용할 수 있습니다. topaz build로 네이티브 바이너리를 만들 때는 컴퓨터에 Rust와 cargo가 설치되어 있어야 합니다.
첫 프로그램
hello.tpz 파일을 만듭니다:
let greeting = "Hello, Topaz!"
print(greeting)실행합니다:
topaz run hello.tpzHello, Topaz!파일 하나를 만들고 topaz run을 실행하면 됩니다. 별도의 프로젝트 설정이나 빌드 단계는 필요하지 않습니다.
10줄 투어
tour.tpz에서 조건과 범위를 사용하는 match, 값을 추가할 수 있는 Map, 고차 함수, 옵셔널 기본값을 함께 살펴봅니다.
function classify(n: int) -> string {
return match n {
case 0 => "zero"
case x if x < 0 => "negative"
case 1..99 => "small"
case _ => "large"
}
}
let mut report: Map<string, string> = Map.new()
for n in [-5, 0, 42, 1000] {
report.insert("{n}", classify(n))
}
print("{report.keys}")
print("{map([1, 2, 3], (x: int) => x * x)}")
print("{toInt("42") ?? 0}")topaz run tour.tpz[-5, 0, 42, 1000]
[1, 4, 9]
42눈여겨볼 세 가지:
match는 값을 만드는 표현식입니다. 각 분기에는 리터럴, 범위, 새 이름,if조건을 사용할 수 있습니다.- 문자열 안의
"{…}"로 값을 넣습니다.report.keys처럼 컬렉션에서 꺼낸 값에도 같은 문법을 사용합니다. toInt("42")는 값이 없을 수도 있는 결과를 반환하고,??는 그때 사용할 기본값을 정합니다. 실패한 변환을 임의의 값으로 바꾸지 않습니다.
프로그램이 멈출 때
배열의 범위를 벗어난 위치에 접근하면 복구 가능한 오류가 아니라 실행 오류가 발생합니다. 프로그램은 멈추고 문제가 생긴 위치를 보여줍니다. fault.tpz:
let xs = [10, 20, 30]
let i = 7
print("{xs[i]}")topaz run fault.tpzerror[TPZ4001]: index 7 is out of bounds for an array of length 3
--> fault.tpz:3:9
|
3 | print("{xs[i]}")
| ^^^^^
프로그램은 실패를 나타내는 종료 코드로 끝납니다. 범위를 벗어난 접근처럼 프로그램의 약속을 어긴 경우에는 실행 오류를 사용하고, 값이 없을 수 있는 정상적인 상황은 옵셔널로 표현합니다. 오류 처리를 참고하세요.
두 파일로 보는 모듈
같은 디렉터리에 있는 .tpz 파일들은 하나의 프로그램 단위를 이룹니다. 파일은 이름으로 다른 파일을 가져오고, 외부에 공개할 이름에는 export를 붙입니다. util.tpz:
export function shout(s: string) -> string {
return s + "!"
}
export let greeting: string = "hello"같은 디렉터리의 main.tpz:
import util
print(util.shout(util.greeting))topaz run main.tpzhello!토파즈는 시작 파일과 같은 디렉터리에서 util.tpz를 찾습니다. 별도의 설정 파일이나 경로 설정은 필요하지 않습니다. 파일 경로, 이름 충돌, 순환 참조, 초기화 순서는 모듈에서 설명합니다.
출력 경로 고르기
topaz run은 소스를 곧바로 실행합니다. 배포할 결과물이 필요하면 같은 소스에서 네이티브 바이너리나 Python 코드를 만들 수 있습니다.
Rust — 네이티브 바이너리. topaz build는 hello.tpz에서 독립 실행 파일을 만듭니다.
topaz build hello.tpz --out-dir out --run결과 파일은 out/target/debug/program에 만들어지고, --run을 지정했으므로 바로 실행되어 같은 Hello, Topaz!를 출력합니다. 이 방식에는 앞에서 설명한 Rust 도구가 필요합니다.
Python — 생성된 소스. topaz build --target python은 Python 소스를 만들며 Rust는 필요하지 않습니다.
topaz build hello.tpz --target python --out-dir py-outprogram.py와 실행 지원 파일 topaz_py_rt.py가 만들어집니다. 두 출력 방식의 현재 지원 범위는 도구 모음 상태에서 확인할 수 있습니다.