Zigプログラミング言語は、演算子の優先順位を簡略化したモデルへと移行しています。CやC++のような多くの伝統的な言語では、複雑な式は深い「優先順位の塔」によって支配されており、括弧を多用しなければ、ステートメントがどのように評価されるかを予測することが困難になる場合があります。Zigの「部分的」な優先順位への移行は、この塔を平坦化することを目的としており、異なるレベルの数を減らすことで、数学的および論理的表現のロジックをより透明にし、実装しやすくすることを目指しています。
この変更は、ネストされた括弧の必要性を最小限に抑えることで、コードの可読性に直接的な影響を与えます。Hacker Newsのコメントでは、多くの言語が実装の容易さのために複雑な優先順位を維持している一方で、Zigのアプローチはより意図的なバランスを追求していることが指摘されています。例えば、一部の言語では、単項マイナスがべき乗演算子よりも強く結合するかどうかといった、曖昧なケースを特定の結合にデフォルトで割り当てることで処理します。一部の環境では、`-a ** b`のような式は特定の優先順位ルールによって異なる解釈を受ける可能性がありますが、Zigの方向性は、開発者の意図を推測に委ねないために、そのような曖昧なケースを構文エラーとして扱う方向への移行を示唆しています。
この設計は、プログラミング言語の哲学のスペクトラム上に位置しています。Zigが優先順位を簡略化している一方で、Goのような他の言語は比較的少ない5つのレベルを使用しています。もう一方の極端な例として、Lispのような言語はすべての操作に明示的な形式や括弧を要求することで優先順位を完全に排除しており、APLは式を右から左へ処理します。Zigの「部分的」な優先順位は、妥協案を象徴しています。それはLispのような極端な明示性を避けつつ、Cスタイルの優先順位の不透明な複雑さを拒否するものです。しかし、この移行は特定のトレードオフも導入します。例えば、Zigは`a + b & c`のような特定の組み合わせを受け入れますが、WGSL(WebGPU Shading Language)のようなより厳格な言語ではこれらをエラーとして拒否します。これは、「簡略化された」優先順位であっても、異なる言語仕様の間では主観的な設計の選択であることを浮き彫りにしています。
