C3のコンパイル時リフレクションがC++とZigを凌駕する理由
Comparing reflection capabilities of C++, Zig and C3

C++、Zig、C3のコンパイル時リフレクションを比較。C++はテンプレートとspliceで強力だが冗長、Zigはcomptimeとinline forで現代的だがマクロ不在。C3は$記法とマクロで実行時とコンパイル時を明示し、enumの文字列化や構造体走査、属性バリデーションを簡潔に記述できる。著者はC3をZigより安定し将来性のあるシステム言語と評価する。
正直、Zigが10年以上の開発を経てもまだ0.1xバージョンに留まっているのはかなり恥ずかしい。
- peesem
「zigの専門家ではない」と言いつつ、まさにその問題を解決するための `@tagName` ビルトインを探すためにドキュメントすら見ないのか?: https://ziglang.org/documentation/0.16.0/#tagName
「zig enum to string」でググれば、最初の結果がRedditの投稿で、そこに載っている解決策が `@tagName` だ。もうこの記事はC3の低労力な宣伝だと切り捨てていいと思う。
- RyanVail
Zigにはattributeがないが、内部の型を薄いラッパーstructで包み、不正な値に対してエラーを投げるsetter関数を使えばいいだけだ。個人的にはattributeよりこちらの方が好みだ。なぜなら、型に対して `validate` を呼び忘れないように頼るのではなく、setterの呼び出し側で起こりうるエラー状態を必ず処理することを強制されるからだ。
- WalterBright
テキストを読むのを妨げる大きな黒いジグザグがある。