概要
- Zigメインブランチ2026年の主な変更点まとめ
- SPIR-Vバックエンドの大幅な修正と機能強化
- @bitCastの新しいセマンティクス導入とLLVMバックエンド最適化
- オブジェクトファイルリンクやマルチスレッド対応などの基盤改善
- さらなるバグ修正とテストカバレッジ向上
2026年6月26日 SPIR-Vバックエンドの進捗
- SPIR-Vバックエンド、最近のコンパイラ変更で多くの部分が動作不良となり、数週間かけて修正
- @SpirvTypeビルトイン 導入により、Zig型システムで表現できなかったSPIR-V型を記述可能に
- シェーダー記述の長年の障壁を解消
- 詳細は #20550, #23326, #35461 を参照
- 実行モード情報 (ワークグループサイズ等)は呼び出し規約で管理
- std.gpu.executionMode()は削除
- spirv_task, spirv_meshなど新たな呼び出し規約追加
- OpExecutionModeの手動指定は非許可
- 機能・拡張の管理 はCPUフィーチャセット駆動に統一
- SPIRV-Headersから依存関係を抽出
- OpCapabilityやOpExtensionの直接指定は禁止
- マルチスレッド対応コード生成 実現
- 各コード生成ジョブはMir値を生成し、スレッドプールで並列実行
- dedup_types(型命令の統合)、prune_unused(未使用コード除去)のISelパス復活
- .spvファイル をオブジェクトファイルとして認識
- 複数の.zigや外部.spvファイルをSPIR-Vリンカで単一モジュールに統合可能
- バグ修正多数、spirv64-vulkanターゲットの動作テスト通過率が49%に向上
- std.gpuはstd.spirvにリネーム
- SPIR-Vバックエンドの実用度向上、今後もテスト・改善継続
- バグ報告はCodebergで歓迎
2026年6月25日 新しい@bitCastセマンティクスとLLVMバックエンド改善
- LLVMバックエンド の整数型ダウングレード方法を最適化
- 任意ビット幅整数型(u4, i13, u40等)のLLVM IRへの変換方法見直し
- メモリ格納時はABIサイズ型(i8, i16, i32等)に拡張
- Clang互換のダウングレード方式を採用し、最適化・誤動作の問題を解消
- @bitCast の新セマンティクス導入
- 旧定義(メモリのバイト再解釈)から、論理ビットレイアウトに基づく変換へ変更
- すべてのバックエンド(LLVM, C, self-hosted)とcomptime実行で統一
- 標準ライブラリやコンパイラ内部の@bitCast利用箇所も監査・修正
- 例:配列やベクター型間のbitcastがエンディアン非依存で一貫動作
- u8→i8や配列→ベクターなど多様な変換が安全・明確に
- @bitCast関連の提案 も同時実装
- ポインタベクター型へのbitCast禁止(#18936)
- enum型へのbitCast許可(一部 #35602)
- LLVMバックエンドのパフォーマンス向上
- 新しい整数型ダウングレードにより最適化復活
- Zigコンパイラ自体で約5%のパフォーマンス向上を確認
- 0.17.0リリースノート で新セマンティクス・移行方法を解説予定
SPIR-Vバックエンドの主な改善点
- 型表現力の拡張 :@SpirvTypeで特殊なSPIR-V型を直接記述
- 呼び出し規約の強化 :シェーダーパイプラインごとに適切な呼び出し規約を用意
- マルチスレッド最適化 :並列コード生成でビルド時間短縮
- オブジェクトファイルリンク :複数ファイルの統合が容易
- テストカバレッジ拡大 :動作確認範囲の大幅増加
@bitCast新セマンティクスのポイント
- 論理ビットレイアウト による型変換
- エンディアン非依存 の一貫した動作
- 配列・ベクター型の柔軟なbitcast が可能
- 不正な変換の禁止 やenum対応など安全性向上
- パフォーマンス最適化 にも貢献
Zigは2026年にかけて、 SPIR-V対応の強化 や 型変換セマンティクスの明確化 など、言語基盤の進化が続いています。今後も開発・改善が期待される状況です。