문법 빠른 참조

자주 쓰는 선언, 제어 흐름, 타입, 포인터와 FFI 문법을 한 페이지에 정리합니다.

Wave Foundation

선언

var value: i32 = 1;
var next: i32 = value + 1;
const LIMIT: i32 = 64;
static total: i64 = 0;
type Identifier = u64;

var는 지역, const/static은 최상위 선언입니다. 지역 변수는 타입을 명시적으로 선언합니다.

함수

fun max(left: i32, right: i32) -> i32 {
    if (left > right) {
        return left;
    }

    return right;
}

제네릭

fun identity<T>(value: T) -> T {
    return value;
}

var value: i32 = identity<i32>(10);

제네릭 호출에는 타입 인자를 명시합니다.

구조체와 enum

struct Pair {
    left: i32;
    right: i32;
}

enum Result -> i32 {
    Ok = 0,
    Error,
}

조건과 반복

if (ready) {
    println("ready");
}

while (count < 10) {
    count += 1;
}

for (var i: i32 = 0; i < 10; i += 1) {
    println("{}", i);
}

match (status) {
    Ready => {
        println("ready");
    }
    0 => {
        println("zero");
    }
    _ => {
        println("other");
    }
}

if, while, for, match의 헤더는 괄호를 사용합니다.

배열과 포인터

var values: array<i32, 4> = [1, 2, 3, 4];
var p: ptr<i32> = &values[0];
var first: i32 = deref p;

콘솔 입출력

print("value = ");
println("{}", value);
input("{}", value);

첫 인자는 문자열 리터럴입니다. 정확한 {} 자리표시자마다 뒤따르는 식이 하나씩 필요하며 input 대상은 대입 가능해야 합니다.

import와 공개 항목

import("std::string::len");
import("./helpers" as helpers);
import("math")::{
    Vector
};

pub fun add(left: i32, right: i32) -> i32 {
    return left + right;
}

pub import("./extra"):: {
    increment
};

로컬 경로는 ./로 시작합니다. 별칭 import는 모듈 이름을 지정하고, 선택 import는 필요한 공개 항목을 이 파일의 이름 공간으로 가져옵니다. pub import는 선택한 항목을 다시 내보냅니다.

FFI

extern(c) fun native_call(value: i32) -> i32;

export(c) fun wave_call(value: i32) -> i32 {
    return value + 1;
}

대상 조건부 항목

#[target(os="linux", arch="riscv64")]
extern(c) fun platform_call(value: i32) -> i32;

지원 조건 키는 arch, os, env, abi입니다. 속성은 바로 다음 최상위 항목을 제어합니다.

인라인 어셈블리

var result: i64 = 0;
asm {
    "mv a0, a1"
    in("a1") 7
    out("a0") result
    clobber("memory")
}

명령 텍스트와 레지스터 이름은 대상에 종속됩니다. 블록에 필요한 모든 입력, 출력과 숨은 clobber를 선언하십시오.

소스 검사

wavec build main.wave --emit=check
wavec print supported-targets
wavec print supported-emit-kinds

학습과 예제 범위

함수 밖에 따로 표시한 지역 변수·문장 예제는 함수 본문에 넣는 코드 조각입니다. 전체 실행 예제와 연습은 Wave 학습 과정에서 이어집니다. 메모리와 외부 기능의 상세 규칙은 표준 라이브러리를 확인하십시오.