Rustを主要なツールとして使用した期間の後、ある開発者がZigプログラミング言語へ移行したことで、高い透明性を備えたシステムプログラミングへのシフトが明らかになりました。Zigは現在1.0以前の状態にあり、標準ライブラリやエコシステムは頻繁な破壊的変更の対象となります。著者は、この不安定さが一部のプロジェクトにとっては障害となる一方で、言語の開発パスによって、安定した後方互換性のある言語では実装がより困難なコアコンパイラや標準ライブラリの大幅な改善が可能になっていると指摘しています。
Zigの定義的な特徴の一つは、明示的なアロケータとIOパラメータを要求することです。グローバルなデフォルトアロケータを使用したり、失敗時にパニックを起こす隠れたメモリ割り当てを行う多くの言語とは異なり、Zigではメモリやオペレーティングシステムと相互作用するすべての関数が、明示的なアロケータまたはIOコンテキストを受け取る必要があります。この設計により、プログラムのどの部分が「純粋」であり、どの部分が外部の状態を変更するかが即座に明確になります。例えば、`FixedBufferAllocator`やアリーナアロケータを渡すことで、開発者は単一のアプリケーション内の異なるコンポーネントに対してメモリ動作を正確に制御できます。この透明性は、プログラムの推論を容易にすることを目的としていますが、Hacker Newsのいくつかのコメントでは、同様のメモリ安全性をより少ない手動オーバーヘッドで提供する現代的なRAII(Resource Acquisition Is Initialization)パターンよりも冗長になる可能性があることが指摘されています。
Zigはまた、依存関係へのアプローチとインクリメンタルコンパイルシステムによっても差別化されています。この言語の文化は、JSONのパース、リフレクション、乱数生成などの多くの不可欠な機能が標準ライブラリに組み込まれているため、外部ライブラリに対するミニマリストなアプローチを推奨しています。これにより、開発者はRustのエコシステムで一般的な、大規模で間接的な依存関係のツリーを避けることができます。さらに、Zigのインクリメンタルコンパイルはほぼ瞬時に行われるように設計されており、開発者はファイルを保存した瞬間に更新を確認できます。しかし、これらの利点には課題も伴います。現在、この言語は広範なドキュメントを欠いており、手動のメモリ管理やエラー管理の負担は、Rustの自動化された安全保証に慣れている人々にとって大きな変化となります。ドキュメントが乏しいため、本番環境向けのソフトウェアを構築するための知識の多くは、地元の「Zig Days」やコミュニティフォーラムなどの人間同士の相互作用を通じて分散されています。
