저는 지금까지 Rust로 쭉 개발을 해오다가 조금 충격적인 소식을 듣게 되었습니다.
javascript engine으로 bun이 기존 node, deno에 비해 굉장히 빠른 성능을 보장을 한다는 내용이 었습니다.
node는 그렇다 쳐도 Rust base인 deno보다 성능이 좋게 나왔다는 게 신기했습니다.
물론 지금은 베타여서 다른 문제점이 있을 수 있지만 왜 zig가 이런 게 가능한지 포스트로 적을려고 합니다.
zig 공식 홈페이지
Andrew Kelley가 개발한 정적 타입의 언어로 llvm을 벡엔드로 사용하고 있습니다.
언어 또한 굉장히 단순하게 설계되어 있어서 500줄 밖에 되지 않습니다. 참고.
몇가지 흥미로운 특징을 뽑으면
꽤 흥미로운 특징들입니다. 그래도 한번 사용을 해봐야 제대로 알 것 같습니다.
자세한 컴파일러 설명은 여기 밑에 참고하시면 좋습니다.
zig compile internal
zig document
먼저 zig 자체를 설치를 해야 합니다. zig 설치 방법 참고해서 진행하면 됩니다.
다음으로 개발을 위해 language server를 설치를 합니다.
zls github에 들어가서 파일을 받고 밑의 명령어를 실행해주세요 (linux 기준)
chmod +x zls
./zls config
그러면 설정이 되고 이제 vscode와 연동하면 됩니다.
vscode zls를 설치하고 zls path를 설정을 하면 모든 준비가 끝났습니다.
mkdir hello-world
cd hello-world
zig init-exe
러스트일 경우에는 cargo new hello-world --bin
하면 디렉토리 만들어지고 프로젝트가 생성이 되는데 이부분은 조금 아쉬운 것 같습니다.
다음과 같은 프로젝트 구조를 가지게 됩니다.
├── build.zig
├── src
│ └── main.zig
main.zig의 파일
const std = @import("std");
pub fn main() anyerror!void {
std.log.info("All your codebase are belong to us.", .{});
}
test "basic test" {
try std.testing.expectEqual(10, 3 + 7);
}
위의 코드 보면서 처음 느낀 점은
test
가 아예 키워드로 쓰이고 있다.try catch
형태가 아닌 try
를 쓰고 에러 여부를 확인하고 있다.이를 zig build
로 빌드를 하면 다음과 같은 결과물이 나옵니다.
# tree output
├── build.zig
├── src
│ └── main.zig
├── zig-cache
│ ├── h
│ ├── o
│ └── z
└── zig-out
└── bin
zig build run
을 치면 "All your codebase are belong to us." 이라는 출력이 나옵니다.
zig build test
를 치면 프로젝트내의 모든 테스트들이 실행이 되고 결과를 알려줍니다.
여기서 모든 zig 문볍을 알려주기는 어려워서 몇가지 인상적인 걸 얘기하겠습니다.
defer
를 통해 block에서 벗어날 때 값을 지정할 수 있습니다.error!T
라고 하면 T타입 이되 error를 가질 수 있는 형태로 표현할 수 있습니다.try
, catch
가 분리되어 있습니다. 그래서 try
부분을 임의로 넓히지 않고 원하는 타이밍에 catch
를 할 수 있습니다.error
끼리 서로 합칠 수 있습니다.const C = A || B
unsafe
비슷하게 @setRuntimeSafety
로 해당 블록에서의 safety를 해제할 수 있습니다.& T
, &mut T
로 구분을 하는데 이 부분은 좀 아쉽습니다.%
을 이용한 wrapping operator를 지원합니다. while
, for
에 else
구문을 넣을 수 있습니다.if
, while
에서 값을 capturing을 할 수 있습니다.if (b) |*value| [ ..
이렇게 할시 b가 null이 아닐 경우,b 안의 값이 value에 할당할 수 있습니다.inline
과 유사하게 Comptime
키워드를 쓰면 컴파일 타임에 연산하겠끔 강제할 수 있습니다.여기까지 제가 느꼈던 zig에 대한 생각입니다.
러스트는 확실히 정의를 하고 진행을 해서 이해는 되지만 zig는 새로운 키워드랑 전에 보지 못한 syntax를 보아서 익숙하지는 않네요.
좀 더 더 써보고 나중에 심화로 알려드리겠습니다.
잘봤습니다!