Zero 플레이그라운드
문서 읽기코드 스니펫을 작성, 실행, 공유하세요 — 별도 설치가 필요 없습니다.
브라우저에서 Zero 사용해 보기
Zero는 Vercel Labs가 2026년 5월에 처음 공개한 새로운 시스템 프로그래밍 언어입니다. 표면적으로는 Rust처럼 보입니다 — pub fun, let mut, ->, 제네릭 꺾쇠 — 하지만 디자인 목표가 독특합니다. toolchain의 모든 부분이 사람뿐 아니라 AI 에이전트도 똑같이 편하게 읽고, 수정하고, 고칠 수 있도록 설계되어 있습니다. 진단(diagnostic)은 안정적인 에러 코드와 함께 구조화된 JSON으로 출력되고, 컴파일러는 타입이 있는 repair plan을 생성할 수 있으며, 바이너리는 10 KiB 미만으로 떨어집니다. 플레이그라운드에서는 아무것도 설치하지 않고도 깔끔한 에디터로 이 언어를 만져볼 수 있습니다.
Zero에서 가장 특징적인 아이디어는 capability 기반 I/O입니다. 암묵적인 전역도 없고, 주변에 떠다니는 stdout도 없습니다 — 터미널에 출력하려는 함수는 World 파라미터를 받아 world.out.write(...)을 호출해야 합니다. 에러는 예외나 panic이 아니라 raises와 check로 전파되고, 옵셔널 값은 null 대신 .has / .value를 사용합니다. Run을 누르면 에디터가 서버에서 코드를 컴파일해 출력 결과를 보여줍니다. stdin은 아직 연결되어 있지 않습니다. Zero v0.1.3가 stdin API를 출시하지 않았기 때문입니다 — 대신 Args 패널을 통해 std.args를 사용하세요.
Zero가 흥미로운 이유
- Capability 기반 I/O: 모든 사이드 이펙트(stdout, 파일, 네트워크)가
World파라미터를 통해 흐르기 때문에, 함수 시그니처만 봐도 무엇에 손댈 수 있는지 알 수 있습니다. 숨겨진 전역도, 암묵적인 allocator도, 깜짝 async도 없습니다. - 에이전트 중심 toolchain:
zero는 안정적인 JSON 진단을 내보내고,zero fix --plan --json은 타입이 있는 repair plan을 생성하며, 모든 CLI subcommand가--json을 받습니다. 에이전트는 출력을 정규식으로 파싱할 필요 없이 그대로 pipe 할 수 있습니다. - 보통 10 KiB 미만인 작은 네이티브 바이너리. 컴파일러가 ELF, Mach-O, PE, WebAssembly용 직접 이미터를 사용하기 때문에 LLVM 의존성을 끌고 다닐 필요가 없습니다.
- 익숙한 문법, 더 날카로운 안전성: 종이 위에서는 Rust처럼 보이지만 panic-on-null도, 암묵적인 GC도, 숨겨진 제어 흐름도 없습니다. 에러는
check로 전파하는 평범한 값일 뿐입니다.
Zero 플레이그라운드에서 시도해 볼 것들
world.out.write로 무언가를 출력하고,raises어노테이션이 어떻게check로 에러 경로를 처리하도록 강제하는지 살펴보세요. 예외 없는 안전성을 위한 Zero의 관용 표현 전체가 이 작은 예제 하나에 담겨 있습니다.std.args.get(N)으로 커맨드라인 인자를 읽고,.has/.value로 옵셔널을 풀어 보세요. 에디터 아래 Args 패널에서 값을 편집하면 Run을 누를 때 실제 argv처럼 프로그램에 전달됩니다.String을 반환하는 작은fun을 작성해main에서 호출하고, 타입들이 자연스럽게 연결되는 모습을 지켜보세요. Zero는 Rust보다 제네릭을 더 적극적으로 추론하기 때문에 호출 지점 대부분에서 어노테이션이 필요 없습니다.
Zero에 대해 자주 묻는 질문
Zero 프로그래밍 언어란 무엇인가요?
--json을 받으며, 별도의 zero fix --plan 모드는 에이전트가 그대로 적용할 수 있는 타입 있는 repair plan을 생성합니다. 문법적으로는 Rust와 Zig 사이 어디쯤에 있습니다. 핵심 아이디어는 World 파라미터를 통한 capability 기반 I/O입니다.이 플레이그라운드를 사용하려면 Zero 컴파일러를 설치해야 하나요?
zero toolchain을 실행하므로, 코드는 브라우저에서 작성하고 Run을 누르기만 하면 됩니다. 컴파일러 버전은 고정되어 있고(현재 v0.1.3), 실행할 때마다 동일한 샌드박스가 사용됩니다. 로컬에서도 개발하고 싶다면, Zero 프로젝트가 GitHub releases 페이지에 미리 빌드된 바이너리를 공개하고 있습니다.왜 Zero 플레이그라운드에는 stdin 입력 칸이 없나요?
World 파라미터 위의 capability(world.out, world.err)와 커맨드라인 인자를 위한 std.args, 환경 변수를 위한 std.env 뿐입니다. Vercel Labs가 stdin capability를 출시하기 전까지는, 에디터 아래 Args 패널을 사용하세요 — 그게 프로그램에 입력을 전달하는 방법입니다.World capability는 무엇이고, 왜 main이 그것을 받나요?
World 값을 받아 그 위의 메서드(world.out.write, world.err.write 등)를 호출해야 합니다. 이렇게 하면 시그니처가 사이드 이펙트에 대한 정직한 선언이 됩니다 — World를 받지 않는 함수는 바깥 세상에 손을 댈 수 없음이 증명되기 때문입니다. main이 그것을 받는 이유는, 최초의 capability를 부여하는 주체가 바로 runtime이기 때문입니다.raises와 check는 무엇을 의미하나요?
raises를 붙이고(선택적으로 구체적인 에러 이름을 나열), 호출자는 check expr을 작성해 실패를 위로 전파합니다. 이름이 있는 에러 타입을 가진 Rust의 ? 연산자처럼 생각하면 됩니다. 실패는 값일 뿐, 제어 흐름의 깜짝쇼가 아닙니다.