7년간 Rust(러스트)로 오픈소스 프로젝트를 개발해온 한 개발자가 RFC 9535 기반의 JSONPath(제이슨패스)를 Zig(직) 언어로 다시 구현하며 얻은 경험과 인사이트를 공유했습니다. 이번 프로젝트는 Rust의 함수형 프로그래밍 스타일에 익숙한 개발자가 Zig의 명령형 스타일과 수동 메모리 관리를 직접 경험하며 두 언어의 차이점을 명확히 비교할 수 있는 기회가 되었습니다.
개발자는 Zig가 단순하고 빠르며 현대적인 언어라는 인상을 받았고, C 언어의 실질적인 후계자가 될 잠재력이 있다고 평가했습니다. 특히 build.zig 파일을 통해 전체, 개별, 디버그, 준수 테스트를 간결하게 실행할 수 있었던 점은 긍정적이었습니다. 하지만 제한적인 통합 개발 환경(IDE) 지원으로 인해 명령줄 인터페이스(CLI) 중심으로 개발 방식을 전환해야 했으며, 이는 평소 사용하던 JetBrains(젯브레인) IDE 환경과 크게 달랐습니다. 또한, Zig는 Rust보다 평평한 파일 구조와 명령형 코드를 유도하며, 할당자(allocator)를 직접 다뤄야 하므로 함수형 조합 대신 제자리 변경(in-place modification)과 반복문(loop)을 사용하는 경우가 많았습니다. 명시적인 메모리 관리는 init, deinit, defer, errdefer와 같은 규율을 요구하며, TestAllocator(테스트 할당자)와 FailingAllocator(실패 할당자)로 누수와 이중 해제를 검출할 수 있지만, Rust의 소유권(ownership) 시스템이 자동으로 막아주는 오류를 개발자가 직접 방지해야 했습니다.
Zig의 미성숙한 생태계와 라이브러리 부족은 실사용에 제약을 줬습니다. 특히 정규식 엔진인 mvzr이 유니코드 속성 이스케이프를 지원하지 않아 JSONPath 필터 함수 구현에 기능적 공백이 발생했습니다. 또한, Zig 표준 라이브러리 API가 버전별로 자주 변경되어 기존 코드가 영향을 받는 문제도 있었습니다. 이러한 경험은 Zig가 강력한 잠재력을 가졌음에도 불구하고, 아직 언어 자체와 생태계가 더 성숙해야 한다는 점을 시사합니다. 그럼에도 불구하고 개발자는 Zig가 매력적인 언어이며, 앞으로도 Zig 생태계에 기여할 프로젝트를 찾을 것이라고 밝혔습니다.
이러한 경험은 개발자들이 새로운 언어를 도입할 때 고려해야 할 중요한 지점들을 보여줍니다. Rust는 강력한 타입 시스템과 소유권 모델로 메모리 안전성을 보장하며 개발 편의성을 제공하는 반면, Zig는 C에 가까운 저수준 제어와 성능을 강점으로 내세웁니다. 두 언어 모두 각자의 장단점과 목표 영역이 명확하므로, 프로젝트의 특성과 요구사항에 맞춰 적절한 언어를 선택하는 것이 중요합니다. 특히 Zig와 같이 빠르게 발전하는 언어는 초기에는 불편함이 따를 수 있지만, 커뮤니티의 성장과 함께 발전 가능성이 크다는 점도 주목할 만합니다.