- Zig의 comptime 기능은 강력한 컴파일 타임 평가 기능을 제공하지만, 제한적임
-
호스트 누출 방지: Zig는 컴파일 타임 코드가 호스트 아키텍처에 접근하지 못하도록 함
-
동적 소스 코드 생성 불가: Zig는 동적 소스 코드 생성을 지원하지 않으며, 부분 평가/특수화를 통해 이를 대체함
-
DSL 지원 없음: Zig는 사용자 정의 구문 확장을 지원하지 않으며, 모든 작업은 Zig 값으로 수행됨
-
RTTI 없음: Zig는 런타임 타입 정보를 제공하지 않으며, 모든 타입 메타 프로그래밍은 컴파일 타임에 처리됨
Zig의 comptime 기능
-
호스트 누출 방지: Zig의 comptime 코드는 호스트 아키텍처에 대한 정보를 누출하지 않음. 이는 컴파일 타임 코드가 런타임 코드와 동일한 동작을 관찰하도록 보장함
동적 소스 코드 생성 불가
- Zig는 동적 소스 코드 생성을 지원하지 않으며, 대신 부분 평가/특수화를 통해 대부분의 동적 코드 생성 사용 사례를 처리함. 이는 특정 인수 값에 대해 함수의 일부만 평가되도록 보장함
DSL 지원 없음
- Zig는 사용자 정의 구문 확장을 지원하지 않으며, 모든 작업은 Zig 값으로 수행됨. 이는 printf와 같은 내장 DSL을 통해 컴파일 타임에 인수를 확인하는 방식으로 구현됨
RTTI 없음
- Zig는 런타임 타입 정보를 제공하지 않으며, 모든 타입 메타 프로그래밍은 컴파일 타임에 처리됨. 이는 코드 크기를 줄이고 컴파일 속도를 높이는 데 기여함
새로운 API 없음
- Zig의 comptime은 새로운 타입을 생성할 수 있지만, 생성된 타입에 메서드를 추가할 수 없음. 이는 타입의 API가 항상 수작업으로 작성되어야 함을 의미함
IO 없음
- Zig의 comptime은 입력 출력을 허용하지 않으며, 컴파일 타임 평가가 안전하고 캐시 가능하도록 보장함. 데이터베이스와의 통신은 빌드 시스템을 통해 처리 가능함
El Disco
- 추상화는 두 가지 측면을 가짐. 강력한 추상화는 더 표현력이 있지만, 코드의 이해를 어렵게 할 수 있음. Zig의 메타 프로그래밍은 매우 강력하며, 선언 시점 타입 검사를 지원하지 않음. 그러나 Zig의 접근 방식은 깔끔하고 우아하며 실용적임