Zero プレイグラウンド
ドキュメントを読むコードスニペットを書いて、実行して、共有できます — セットアップ不要。
ブラウザで Zero を試す
Zero は Vercel Labs の新しいシステムプログラミング言語で、2026年5月に初めてリリースされました。見た目は Rust っぽい — pub fun、let mut、->、ジェネリックの角括弧 — のですが、設計目標が少し変わっています。toolchain のすべての部分が、人間と同じくらい AI エージェントにとっても読みやすく、編集しやすく、修復しやすいように作られているのです。診断は安定したエラーコード付きの構造化 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パラメータを通るので、関数のシグネチャを見るだけで何に触れるかが分かります。隠れたグローバルなし、暗黙のアロケータなし、サプライズな async もなし。 - エージェントを最優先にした toolchain:
zeroは安定した JSON 診断を出力し、zero fix --plan --jsonは型付きの repair plan を生成し、CLI のすべての subcommand が--jsonを受け付けます。エージェントは regex でパースする代わりに出力をそのまま 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 の ? 演算子のようなものだと思ってください。失敗は値であって、制御フローのサプライズではありません。