토파즈 언어

CSKernel™의 네이티브 언어로서 의미론적 컴퓨팅의 힘을 최대한 활용할 수 있도록 설계된 현대적 프로그래밍 언어

설계 철학

TOPAZ의 핵심 가치와 언어 설계 원칙

Write Less, Express More

최소한의 코드로 최대한의 표현력을 달성합니다. 불필요한 보일러플레이트를 제거하고 개발자의 의도를 명확하게 표현할 수 있는 간결한 문법을 제공합니다.

"코드가 시가 되는 언어"

글로벌 문법, 로컬 표현

키워드는 영어로 통일하되, 식별자는 세계 모든 언어를 자유롭게 사용할 수 있습니다. 개발자는 자신의 모국어로 자연스럽게 코딩할 수 있습니다.

의미론적 통합

CSKernel™의 의미론적 원자와 직접 매핑되어 언어 간 변환과 최적화가 원활하게 이루어집니다.

주요 특징

토파즈를 혁신적으로 만드는 10가지 핵심 기능

언어적 혁신

완벽한 다국어 식별자 지원

한글, 중국어, 일본어, 이모지까지 자유롭게 사용

똑똑한 타입 시스템

강력한 타입 추론과 리터럴 타입 지원

패턴 매칭의 예술

범위, 구조, 가드를 포함한 고급 패턴 매칭

파이프라인의 마법

데이터 변환이 시처럼 흐르는 파이프라인 연산자

에러 처리의 우아함

Result 타입과 ? 연산자를 통한 안전한 에러 처리

TOPAZ
1// 다국어 식별자와 이모지 지원
2function 인사하기(이름: string, 언어: string = "한국어") -> string {
3    match 언어 {
4        case "한국어" => "안녕하세요, {이름}님! 👋"
5        case "English" => "Hello, {이름}! 👋"
6        case "日本語" => "こんにちは、{이름}さん! 👋"
7    }
8}
9
10let 사용자수 = 1000
11let 🚀성장률 = 0.15
12
13// 강력한 패턴 매칭
14let 성적 = match 점수 {
15    case 95..100 => "A+"
16    case 90..<95 => "A"
17    case 80..<90 => "B"
18    case _ => "재수강"
19}
20
21// 파이프라인 연산자
22let 분석결과 = 원본데이터
23    |> 정규화(표준: "UTF-8")
24    |> 필터링(조건: x => x.유효성검사())
25    |> 그룹화(기준: x => x.카테고리)
26    |> 집계(방식: 평균)
27
28// 안전한 에러 처리
29function 안전한파일처리(경로: string) -> Result<Data, Error> {
30    let 파일 = 파일열기(경로)?
31    defer { 파일.닫기() }
32    
33    let 내용 = 파일.읽기()?
34    let 데이터 = JSON.파싱(내용)?
35    
36    Ok(데이터)
37}

고급 기능

현대적 개발 경험을 위한 혁신적 기능들

자동 비동기 처리

async/await 키워드 없이 모든 I/O 작업이 자동으로 비동기 처리됩니다. 동기 코드처럼 작성하면서도 비동기의 성능을 얻습니다.

TOPAZ
1// 모든 I/O는 자동으로 비동기 처리
2function 사용자정보가져오기(id: int) -> User {
3    let 사용자 = API.사용자조회(id)            // 자동 await
4    let 프로필 = API.프로필조회(사용자.프로필ID)  // 자동 await
5    let 활동내역 = API.활동내역조회(id)         // 자동 await
6    
7    return User {
8        기본정보: 사용자,
9        프로필: 프로필,
10        활동: 활동내역
11    }
12}
13
14// 병렬 실행은 명시적으로
15let 대시보드데이터 = concurrent {
16    날씨: 날씨API.현재날씨("서울")
17    환율: 환율API.실시간환율("USD/KRW")
18    뉴스: 뉴스API.헤드라인(5)
19    주가: 주식API.코스피지수()
20}

모든 것은 표현식

if, match, for, try 등 모든 구문이 값을 반환하는 표현식입니다. 더 간결하고 함수형 스타일의 코드를 작성할 수 있습니다.

TOPAZ
1// if, match, for 모든 구문이 값을 반환
2let 메시지 = if 시간 < 12 { "좋은 아침" } 
3             else if 시간 < 18 { "좋은 오후" }
4             else { "좋은 저녁" }
5
6// for 루프도 값을 생성
7let 제곱수들 = for x in 1..10 { x ** 2 }
8let 필터링된 = for x in 데이터 where x > 0 { x }
9
10// match도 당연히
11let 가격 = match 회원등급 {
12    case "VIP" => 정가 * 0.7
13    case "일반" => 정가 * 0.9
14    case _ => 정가
15}

진화된 문자열 템플릿

태그드 템플릿으로 SQL 인젝션, XSS 등의 보안 취약점을 자동으로 방지합니다. 타입 안전한 문자열 처리를 제공합니다.

TOPAZ
1// 태그드 템플릿으로 안전한 처리
2let 쿼리 = sql`
3    SELECT * FROM users 
4    WHERE age > ${나이} 
5    AND city = ${도시}
6`  // SQL 인젝션 자동 방지!
7
8let 웹페이지 = html`
9    <div class="card">
10        <h1>${제목}</h1>
11        <p>${내용}</p>
12    </div>
13`  // XSS 자동 방지!
14
15// 다양한 문자열 리터럴
16let 경로 = p"/home/{사용자}/documents"    // 경로 자동 검증
17let 정규식 = r"\d{3}-\d{4}-\d{4}"       // 이스케이프 불필요
18let 명령어 = sh"ls -la | grep {패턴}"     // 셸 명령어 안전 실행

내장 테스트 시스템

함수 정의와 테스트가 하나로 통합된 혁신적인 테스트 경험

테스트 철학

  • 함수와 테스트가 함께 정의되어 일관성 보장
  • 속성 기반 테스트로 코너 케이스 자동 발견
  • dbg! 매크로로 실시간 디버깅 지원
TOPAZ
1// 함수 정의와 테스트가 한 몸!
2function 피보나치(n: int) -> int {
3    if n <= 1 { n } 
4    else { 피보나치(n-1) + 피보나치(n-2) }
5} test {
6    assert 피보나치(0) == 0
7    assert 피보나치(1) == 1
8    assert 피보나치(10) == 55
9}
10
11// 이메일 검증 함수
12function 이메일검증(이메일: string) -> bool {
13    정규식.매치(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$", 이메일)
14} test {
15    assert 이메일검증("user@example.com") == true
16    assert 이메일검증("invalid.email") == false
17    assert 이메일검증("") == false
18}
19
20// 속성 기반 테스트
21@property_test
22function 역함수테스트(x: int) {
23    let 암호화된 = 암호화(x)
24    let 복호화된 = 복호화(암호화된)
25    assert x == 복호화된
26}
27
28// 강력한 디버깅
29let 복잡한값 = dbg!(어려운계산())
30// 출력: [src/main.tpz:42] 어려운계산() = 결과값

타입 안전성

컴파일 타임에 더 많은 오류를 잡아내는 강력한 타입 시스템

리터럴 타입과 유니온 타입

구체적인 값을 타입으로 사용하고 여러 타입의 조합을 안전하게 처리할 수 있습니다.

TOPAZ
1// 리터럴 타입 - 타입 안정성 극대화
2type 신호등 = "빨강" | "노랑" | "초록"
3type 주사위 = 1 | 2 | 3 | 4 | 5 | 6
4type Status = "대기" | "진행중" | "완료" | 404 | 500
5
6function 신호처리(: 신호등) {
7    match{
8        case "빨강" => 정지()
9        case "노랑" => 주의()
10        case "초록" => 출발()
11        // 컴파일러가 모든 경우를 처리했는지 확인!
12    }
13}
14
15// 유니온 타입의 우아한 처리
16function 유연한처리(: int | string | null) -> string {
17    match{
18        case n: int => "숫자: {n}"
19        case s: string => "문자열: {s}"
20        case null => "값 없음"
21    }
22}

스마트 타입 추론

명시적 타입 선언 없이도 컴파일러가 정확한 타입을 자동으로 추론합니다.

TOPAZ
1// 강력한 타입 추론
2let 나이 = 25              // int로 자동 추론
3let 이름 = "김토파즈"       // string으로 자동 추론
4let 복잡한구조 = {         // 구조까지 추론
5    id: 1,
6    tags: ["web", "api"]
7}  // { id: int, tags: Array<string> }
8
9// 부분 적용 - 함수를 레고처럼!
10let 더하기5 = 더하기(5, _)
11let 결과 = [1, 2, 3].map(더하기5)  // [6, 7, 8]
12
13let 범위검사 = 범위내(0, _, 100)
14let 유효한값들 = 데이터.filter(범위검사)

관련 정보

토파즈와 관련된 추가 기술 문서 및 구현 세부사항