# Zig의 comptime이 하지 않는 일들

> Clean Markdown view of GeekNews topic #20446. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20446](https://news.hada.io/topic?id=20446)
- GeekNews Markdown: [https://news.hada.io/topic/20446.md](https://news.hada.io/topic/20446.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-04-21T09:45:15+09:00
- Updated: 2025-04-21T09:45:15+09:00
- Original source: [matklad.github.io](https://matklad.github.io/2025/04/19/things-zig-comptime-wont-do.html)
- Points: 6
- Comments: 1

## Summary

Zig의 **comptime** 기능은 **강력한 컴파일 타임 평가**를 제공하지만, **호스트 정보 접근 불가**와 같은 **의도적인 제한**이 있습니다. 이러한 제한은 **크로스 컴파일의 안전성**을 높이고, **명시적인 타입 기반 코드 특수화**를 가능하게 합니다. **동적 코드 생성, DSL, RTTI, I/O** 등의 기능은 지원하지 않으며, **새 API 생성**도 불가능합니다. 이러한 제한 덕분에 Zig는 **예측 가능하고 이해하기 쉬운 메타프로그래밍**을 제공합니다.

## Topic Body

- Zig의 **comptime** 기능은 매우 **강력한 컴파일 타임 평가 기능**을 제공하지만 **의도적으로 제한적**임  
- 컴파일 타임 코드 실행 시 **호스트 정보에 접근 불가능**, 크로스 컴파일에 적합한 설계임  
- **동적 코드 생성, DSL, RTTI, I/O 등은 지원하지 않음**, 대신 명시적인 타입 기반 코드 특수화 사용  
- **RTTI는 직접 구현 가능**, 단 컴파일 타임에만 존재하는 타입 정보를 런타임에 사용할 수 있게 재구성 가능함  
- **comptime으로 새 타입 생성 가능하지만 API 확장은 불가**, 사용자 정의 메서드 추가는 불가능함  
  
---  
  
### Zig의 comptime이 하지 않는 일들  
  
- Zig의 comptime은 제네릭, 조건부 컴파일, 직렬화, ORM 등 강력한 기능을 제공함에도 불구하고 **일부 기능은 명시적으로 제한됨**  
- 그 제한들이 오히려 Zig의 설계를 간결하고 예측 가능하게 만듦  
- # 호스트 정보 접근 불가 (No Host Leakage)  
  - comptime 코드는 **코드가 실행되는 시스템이 아닌, 타겟 플랫폼을 기준으로 동작**  
  - Zig에서는 컴파일 타임에 **호스트 시스템의 엔디안, 포인터 크기 등 정보를 사용할 수 없음**  
  - 이는 **크로스 컴파일을 고려한 안전성 확보** 목적  
  - 예시 코드에서 **BF16 형식 숫자의 바이트 출력이 타겟 플랫폼에 따라 다름**  
- # 문자열 기반 코드 생성 없음 (No #eval)  
  - Zig은 C의 `#include`, D 언어의 mixin, Rust 매크로처럼 **동적으로 코드를 생성하는 기능을 제공하지 않음**  
  - 대신 **comptime 인자 기반의 부분 평가(partial evaluation)** 지원  
  - 특정 인자가 컴파일 타임에 알려져 있으면, 해당 분기만 살아남아 **코드 최적화 가능**  
- # DSL 문법 확장 불가 (No DSLs)  
  - Zig에서는 Lisp, Rust처럼 **사용자 정의 구문(syntax)을 만드는 기능이 없음**  
  - 모든 데이터는 Zig 문법에 따른 **값(value)** 형태로만 전달됨  
  - 포맷 문자열(`printf`)처럼 제한된 DSL은 **comptime 문자열로만 구현** 가능  
- # 런타임 타입 정보 없음 (No RTTI)  
  - Zig은 Python 같은 동적 언어처럼 동작할 수 있지만, **타입 정보는 오직 comptime에만 존재**  
  - 런타임에서도 동작하도록 하려면 **직접 RTTI 구조체를 정의하고, 포인터로 조작**해야 함  
  - 예: struct 필드의 이름과 오프셋 정보를 담은 `RTTI` 구조체 정의 후, 포인터로 필드에 접근  
- # 새 API 생성 불가 (No New API)  
  - Zig에서는 comptime으로 새 타입을 만들 수는 있지만, **이 타입에 메서드를 추가할 수 없음**  
  - Rust의 derive macro처럼 API를 확장할 수 없음  
  - JSON 직렬화 구현 시 `.to_json()` 메서드를 추가할 수 없고, **전역 함수에 타입 인자를 넘기는 방식으로 구현**  
- # 컴파일 타임 IO 없음 (No IO)  
  - Zig의 comptime은 **파일 시스템, 네트워크, 데이터베이스 등 외부 리소스 접근을 금지**  
  - 이로 인해 **재현 가능성, 안전성, 캐시 활용성이 높아짐**  
  - IO가 필요하면 build 시스템인 `build.zig`을 사용하여 **사전 생성된 Zig 코드 import 방식 사용**  
- # 정리: El Disco (추상화와 단순성의 균형)  
  - Zig은 **강력한 메타프로그래밍 기능을 제공하면서도, 매우 제한적인 설계를 통해 예측 가능성을 확보**  
  - 이 제한 덕분에 Zig의 comptime은 **실용적이며, 이해하기 쉬운 형태로 유지**  
  - 복잡한 추상화 없이도 실제 사용에 유용하며, **선언된 기능만 명확히 작동**

## Comments



### Comment 37406

- Author: neo
- Created: 2025-04-21T09:45:15+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43744591) 
* Zig의 comptime은 독특한 특징을 가짐
  - 다른 언어에서 다양한 기능을 대체함
  - 참조 투명성을 가짐으로써 이해하기 쉬움
  - introspection을 통해 강력한 기능을 제공함
  - Lisp와는 다른 방식으로 간단하면서도 강력한 코드 작성 가능성 제공
  - 새로운 디자인과 접근 방식을 가진 언어는 드물음

* Zig의 comptime의 단점과 해결책
  - zig build를 통해 코드 생성 후 @import하여 컴파일함
  - 더 많은 자유와 무제한 실행 시간을 제공하지만 zig 타입을 현재 컴파일에서 값으로 생성할 자유는 없음
  - 과거 Perl과 Tcl을 C로 연결하던 경험과 유사함
  - zig 커뮤니티의 자기 비판적인 태도가 때때로 당황스러움

* Borges의 이야기에서 인용된 스페인어 문구는 노르웨이 신에 관한 것임

* comptime의 유연성
  - 작업 중 타입 정보가 필요할 때 함수 매개변수에 추가 가능
  - 특정 상황에서 타입 제공이 불가능할 때 설계 문제 해결 필요

* Zig의 comptime 기능의 유명한 점
  - 제네릭, 조건부 컴파일, 서브타이핑, 직렬화, ORM 등 다양한 기능 제공
  - 다른 언어에서도 유사한 컴파일 타임 평가 기능이 있음

* 교육적인 블로그 게시물
  - 'comptime for'와 'inline for'의 차이점 설명
  - inline 버전은 comptime에서만 길이를 알 수 있음

* Zig 언어와 도구에 대한 긍정적인 의견
  - Rust와 같은 안전 모드가 있었으면 좋겠음
  - C/C++보다 훨씬 발전된 단계임
  - Zig 컴파일러에 깊은 인상을 받음

* Zig의 comptime에 대한 흥미로운 점
  - 컴파일 타임에 타입을 값으로 표현할 수 있는 능력
  - 런타임 오버헤드 없이 동적 언어나 런타임 반영을 근접하게 구현 가능

* 컴파일 타임 코드 실행에 대한 혼란
  - 컴파일 타임 코드가 실제로 로컬 호스트 머신에서 실행되는지에 대한 의문
  - Zig가 호스트 플랫폼을 숨기는 이유에 대한 궁금증
  - Zig의 cross-compile 기능에 대한 긍정적인 의견
