第35章へようこそ。
今日のテーマは「手続き的マクロ」です。
これまでの3章で扱ってきたのは宣言的マクロでした。
macro_rules!の宣言で、パターンと展開の組をルールとして並べる。
入力のトークンがパターンに照らされ、対応する展開が呼び出し位置に差し込まれる。
宣言的マクロには表現の限界があります。
パターンと展開の対応で書ける範囲を超えた変換、たとえば構造体のフィールド名を文字列として取り出して別のコードに埋め込む、こうした処理は宣言的の枠を超える。
これを扱うために用意されているのが、今日扱う手続き的マクロです。
今日扱うのは、宣言的マクロの限界、手続き的マクロが解く問題、3つの形態、トークンストリームという界面、synとquoteによる分業、そして別クレートとしてコンパイルされる構造的な理由です。