TL;DR
堅牢で最適かつ再利用可能なソフトウェアを保守するための、汎用プログラミング言語とツールチェーン。
仕組み
公式サイトでは、次の 3 つを特徴として挙げている。
- シンプルな言語: プログラミング言語の知識をデバッグするのではなく、アプリケーションのデバッグに集中できる
- comptime: コンパイル時のコード実行と遅延評価にもとづく、新しいメタプログラミングの方法
- Zig で保守する: C、C++、Zig のコードベースを少しずつ改善できる
公式サイトの概要によると、Zig には隠れた制御フローも、隠れたメモリ割り当ても、プリプロセッサも、マクロもない。制御が移るのは、言語のキーワードと関数呼び出しのときだけである。メモリはプログラマが管理し、割り当ての失敗も扱う。標準ライブラリでも、メモリを割り当てる関数はアロケータを引数に受け取る。
エラーは投げずに値として返し、無視できない。catch でその場で扱うか、try で呼び出し元に返す。ポインタは null にならず、null になりうる値は ? を付けた optional 型で表す。
@cImport を使うと、バインディングを書かずに C の型や関数をそのまま使える。Zig は C のコンパイラとしても使え、多くのターゲット向けの libc を同梱している。ビルドシステムも付属しているので、別のビルドツールは要らない。