열거형 (enum)과 타입 별칭 (type alias)
Wave는 C와 유사한 명시적 타입 시스템을 유지하면서도, 가독성과 ABI 안정성을 위해 타입 별칭(type alias) 과 정수 기반 열거형(enum) 을 지원한다.
타입 별칭 (Type Alias)
개요
type 키워드는 기존 타입에 새로운 이름을 부여한다. 이는 새로운 타입을 만드는 것이 아니라, 완전한 동치(alias) 이다.
type MyInt = i32;
위 선언에서 MyInt는 i32와 완전히 동일한 타입이다.
특징
- 런타임 오버헤드 없음
- ABI 상 완전히 동일
- 컴파일 타임에만 존재
- enum의 repr 타입으로 사용 가능
사용 예시
type Size = i64;
type Index = u32;
fun add(a: Size, b: Size) -> Size {
return a + b;
}
타입 동치성
type A = i32;
type B = A;
fun f(x: i32) -> i32 { return x; }
fun main() {
var v: B = 10;
f(v); // OK
}
type은 새 타입이 아니라 이름만 다른 타입이다.
열거형 (enum)
개요
Wave의 enum은 정수 기반 열 거형이다. 모든 열거형은 반드시 repr 타입을 가져야 한다.
enum ShaderUniformType -> i32 {
A = 0,
B,
C = 10,
D
}
repr 타입
-> i32 는 이 enum이 어떤 정수 타입으로 표현되는지를 나타낸다.
허용되는 repr 타입:
i8,i16,i32,i64u8,u16,u32,u64- 해당 타입의
type alias
type MyInt = i32;
enum Example -> MyInt {
X,
Y
}