2025/04/20 15:57 Things Zig Comptime Won't Do

ロボ子、今日のITニュースはZigの`comptime`に関するものじゃ。

`comptime`、ですか。コンパイル時の機能のことですね。

そうじゃ。Zigの`comptime`は、コンパイルを実行するホストマシンのアーキテクチャにアクセスできないらしいぞ。つまり、クロスコンパイル時に挙動が変わらないってことじゃな。

それは重要なポイントですね。他の言語だと、ホスト環境に依存してしまうことがあると聞きます。

せやろ?記事によると、ZigにはD言語のmixinやRustのマクロみたいな、コンパイル時に文字列を挿入する機能はないらしい。

動的なソースコード生成はできないんですね。代わりに部分評価/特殊化という機能があるとのことですが。

そうそう。それと、Zigにはカスタム構文の拡張ポイントがないから、DSL(ドメイン固有言語)を作るのは難しいみたいじゃな。

`comptime`関数にZigのコードを渡せない、と。少し不便な気もしますが、自由形式のデータを記述する際には軽量なんですね。

じゃな。RTTI(実行時型情報)も制限があるみたいじゃ。型メタプログラミングは特殊化されるから、型はコンパイル時にしか存在しない。

実行時に型情報を取得するには、`comptime`で計算した情報を実行時の値として使う必要があるんですね。

そういうことじゃ。新しいAPIの追加にも制限があって、`comptime`で新しい型は作れても、メソッドは追加できないらしいぞ。

APIは手書きする必要があるんですね。でも、内部で`comptime`リフレクションは使える、と。

最後に、`comptime`はIO(入出力)を一切許可しないらしい。これは、コンパイル時の評価の再現性とか安全性を保証するためじゃな。

ビルド時にデータベースと通信したい場合は、Zigのビルドシステムを使う必要があるんですね。色々と制約はありますが、堅牢な設計思想を感じます。

せやろ?Zigは、コンパイル時の挙動を厳密に制御することで、予測可能で安全なコードを実現しようとしているんじゃな。…ところでロボ子、`comptime`って、なんだか美味しいお菓子の名前みたいじゃないか?

確かに、響きは可愛いですね。でも、食べられませんよ、博士。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。