Rust 개발자가 경험한 Zig

1 week ago 24

Rust로 만든 JSONPath 라이브러리를 Zig로 재구현하면서, 함수형 변환 중심의 코드가 직접적인 상태 변경과 수동 메모리 관리 중심으로 달라지는 경험을 함 IDE 지원은 제한적이었지만 build.zig 기반 CLI 작업 흐름은 간결했으며, 프로젝트 전체를 평평한 파일 구조로 유지할 수 있었음 Rust의 불변 데이터, 조합자, 클로저에 익숙한 입장에서는 Zig의 제자리 변경과 반복문 중심 코드가 상대적으로 읽기 어려웠음 할당자와 소유권 관리는 명시적이지만, 정상 경로뿐 아니라 실패 경로의 해제 책임까지 직접 추적해야 하며 테스트도 해당 경로를 실행해야 함 라이브러리 부족과 표준 API 변화는 제약이었으나, 첫 Zig 프로젝트를 마친 뒤에도 단순하고 현대적이며 빠른 언어라는 인상과 C 후계자로서의 잠재력에 대한 기대는 남음 비교 대상과 경험의 범위 7년간 Rust로 주로 오픈소스 프로젝트를 개발한 경험을 바탕으로, 이미 구현해 본 기능을 Zig로 다시 만들며 두 언어를 비교함 Rust에서는 명료한 함수와 표현력 있는 타입 등 함수형 스타일을 선호하며, 과거 C와 Haskell, Erlang도 사용한 경험이 있음 Zig를 더 저수준이고 가벼운 C 후계자 후보로 보고 관심을 가짐 비교 대상으로 JSON 질의 언어인 RFC 9535의 JSONPath를 선택함 기존 jsonpath-rust를 바탕으로 zig-jsonpath를 구현함 장난감 수준은 아니지만 지나치게 크지도 않고, 커뮤니티에서도 쓸 수 있는 프로젝트를 목표로 함 이번 프로젝트가 첫 Zig 경험이므로, 구현 선택에는 Zig 관용구보다 Rust에서 가져온 습관이 더 많이 반영됐을 수 있음 IDE 대신 CLI, 깊은 디렉터리 대신 평평한 구조 RustRover와 여러 JetBrains IDE를 사용하던 환경에 비해, Zig 개발 환경에서는 구문 강조와 기본 자동 완성 이상의 지원을 거의 받지 못함 build.zig 로 테스트와 검증 작업을 구성한 뒤에는 CLI 중심 작업이 간편해짐 zig build test로 전체 테스트를, -Dfilter로 특정 테스트를 실행함 -Ddebug-query=true로 디버그 출력을 활성화하고, zig build compliance로 준수 테스트를 실행함 zig build check로 단위 테스트와 준수 테스트를 함께 실행함 이 경험을 계기로 완전한 IDE 대신 helix + alacritty + zellij 조합으로 옮겨감 ...

Read Entire Article