말하는 방법은하나.

애플리케이션의 의도를 간결하고 일관된 문법으로 표현하는 프로그래밍 언어.

지금 실행하면 아래와 같은 결과를 얻습니다.

TOPAZ
function clean(words: Array<string>) -> Array<string> {
    return filter(words, (w: string) => w != "")
}

function shout(words: Array<string>) -> Array<string> {
    return map(words, (w: string) => w + "!")
}

let line = ["one", "", "way", "", "to", "say", "it"]
    |> clean
    |> shout
print("{line}")
출력
[one!, way!, to!, say!, it!]

산출물은 넷, 소스는 하나

방금 쓴 파일을 그대로 실행한다. 같은 파일에서 네이티브 바이너리와 Python 번들과 웹 패키지가 나오고, 선택은 명령 하나에 붙는 플래그다.

형태는 하나로 정해져 있다

자주 쓰는 개념마다 정본 표기가 하나이고, 언어가 그 선을 지킨다. 사람이 쓴 파일과 코드 생성 도구가 쓴 파일이 같은 모양으로 나온다.

실패에도 모양이 있다

복구 가능한 실패는 Result로 흐르고 예상된 부재는 Option으로 흐른다. 정리 코드는 모든 종료 경로에서 실행되고, 검사기는 match에서 빠뜨린 경우를 짚어 준다.

당신이 쓰는 말이 이름이 된다

식별자는 렉서 단계부터 유니코드이고, 입력한 이름을 뒤에서 고쳐 쓰는 단계가 없다. 사용자는 평범한 변수이며, 모듈 해석기는 혼동을 부르는 이름을 거절한다.

작은 것은 의도다

표면이 작은 것이 곧 제품이어서 작게 유지한다. 사람이 읽는 문법과 코드 생성 도구가 쓰는 문법이 같다.

실행 가능한 명세

사람을 위한 명세서이자, 컴퓨터가 실행하는 코드.

토파즈는 애플리케이션의 의도를 간결하게 표현하는 유니코드 우선 언어입니다. 사람과 코드 생성 도구가 같은 문법을 사용하며, 작성한 프로그램을 바로 실행하거나 Rust·Python·웹 산출물로 만들 수 있습니다.

철학 읽기 →

코드가 주인공이다.

TOPAZ
function discount(customer: { tier: string, years: int }) -> float {
    return match customer {
        case { tier: "vip", years } if years > 5 => 0.3
        case { tier: "vip" } => 0.2
        case { years } if years > 1 => 0.1
        case _ => 0.0
    }
}

print("{discount({ tier: "vip", years: 7 })}")
print("{discount({ tier: "new", years: 0 })}")
출력
0.3
0.0
TOPAZ
let result = concurrent {
    answer: 6 * 7
    status: "ready"
}

defer print("cleaned up")
print("{result.answer} {result.status}")
출력
42 ready
cleaned up
TOPAZ
function fibonacci(n: int) -> int {
    return match n {
        case 0 => 0
        case 1 => 1
        case _ => fibonacci(n - 1) + fibonacci(n - 2)
    }
}

let series = map(0..<10, fibonacci)
print("{series}")
출력
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
TOPAZ
function clean(words: Array<string>) -> Array<string> {
    return filter(words, (w: string) => w != "")
}

function shout(words: Array<string>) -> Array<string> {
    return map(words, (w: string) => w + "!")
}

let line = ["one", "", "way", "", "to", "say", "it"]
    |> clean
    |> shout
print("{line}")
출력
[one!, way!, to!, say!, it!]

어느 언어든, 같은 코드.

한국어

TOPAZ
function 인사하기(이름: string) -> string {
    return "안녕하세요, {이름}님!"
}

print(인사하기("토파즈"))
출력
안녕하세요, 토파즈님!

English

TOPAZ
function greet(name: string) -> string {
    return "Hello, {name}!"
}

print(greet("Topaz"))
출력
Hello, Topaz!

Русский

TOPAZ
function привет(имя: string) -> string {
    return "Привет, {имя}!"
}

print(привет("Топаз"))
출력
Привет, Топаз!

의도는 당신이 쓰고, 컴파일러는 Rust와 Python을 만든다.

오늘 툴체인이 하는 일 보기 →