Zig
Zig | |
---|---|
![]() | |
개발사 | |
개발자 | Andrew Kelley |
최초 출시 | 2016년 2월 8일 |
최신 버전 | 0.15.1 |
지원 운영체제 | |
플랫폼 | |
프로그래밍 언어 | |
라이선스 | MIT |
웹사이트 | 공식 사이트 |
Zig는 2016년 2월 8일 Andrew Kelley가 개발한 프로그래밍 언어이다. C 언어를 대체할 수 있는 범용 시스템 프로그래밍 언어를 목표로 하며, 성능과 안정성을 동시에 추구한다.
역사
- 2016년: Zig 언어 첫 발표.
- 2017년: GitHub 저장소 공개 및 초기 커뮤니티 형성.
- 2019년: 크로스 컴파일 기능이 주목을 받음.
- 2025년: 0.15.1 버전 출시.
- 현재: 활발히 커뮤니티에서 개발 및 개선이 진행 중.
주요 특징
Zig 언어는 다음과 같은 특징을 가진다:
- 간결하고 명확한 문법 → C와 비슷하지만 더 안전함
- 저수준 메모리 접근(포인터, 수동 메모리 관리) → 시스템 프로그래밍에 적합
- 플랫폼 및 아키텍처 간 강력한 이식성 (크로스 컴파일 지원이 뛰어남)
- 표준 라이브러리 제공 → 파일 입출력, 문자열 처리, 메모리 관리 등 기본 기능 지원
- 컴파일 타임 실행(Comptime) 기능 → 빌드 시점에 코드 실행 및 최적화 가능
- 오류 처리 방식이 명확함 → 예외(Exception) 대신 에러 집합(Error Set)과 try/catch 사용
- Null 안정성 → Null 허용 타입과 비허용 타입을 명확히 구분
예제 코드
Zig 공식 홈페이지의 예제이다.
const std = @import("std");
const parseInt = std.fmt.parseInt;
test "parse integers" {
const input = "123 67 89,99";
const gpa = std.testing.allocator;
var list: std.ArrayList(u32) = .empty;
// 리스트가 스코프 종료 시 해제되도록 보장한다.
// 이 줄을 주석 처리해보라!
defer list.deinit(gpa);
var it = std.mem.tokenizeAny(u8, input, " ,");
while (it.next()) |num| {
const n = try parseInt(u32, num, 10);
try list.append(gpa, n);
}
const expected = [_]u32{ 123, 67, 89, 99 };
for (expected, list.items) |exp, actual| {
try std.testing.expectEqual(exp, actual);
}
}
활용
Zig는 다음과 같은 분야에서 활용되고 있다:
- 시스템 프로그래밍 (운영체제, 드라이버, 임베디드 소프트웨어)
- 크로스 컴파일 환경 구축 (여러 플랫폼용 바이너리를 손쉽게 빌드 가능)
- 성능이 중요한 소프트웨어 (게임 엔진, 네트워크 서버, 고성능 라이브러리)
- C 언어 대체 및 C 라이브러리와의 상호 운용
- 빌드 시스템 (Zig 자체 빌드 시스템을 통한 프로젝트 관리)