入門のチャプタで再帰的なマクロについて言及しました、しかしそのチャプタでは詳細について話していませんでした。再帰的なマクロが便利な他の理由は、それぞれの再帰的な呼出はマクロに与えられた引数にたいしてパターンマッチを行える可能性を与えてくれることです。オートマトンをRustのマクロで実装する事が可能です。マクロの定義の重複している部分を減らしてみましょう。見られるマクロ以下は、Rustコード中でよく見られるマクロたちです。panic!このマクロは現在のスレッドをパニック状態にします。パニック時のメッセージを指定することができます。見たことがあるでしょう。5];また、値の繰り返しのベクタを作成することも可能です。assert_eq!この2つのマクロはテスト時に利用されています。真偽値を引数に取ります。2つの等価性をチェックする値を引数に取ります。エラーハンドリングのために利用されています。Ok(())}unreachable!このマクロはあるコードが絶対に実行されるべきでないと考えている時に利用します。unreachable!();}時々、コンパイラによって絶対に呼び出されるはずがないと考えているブランチを作成することになる時があります。マクロはもし関数の本体の実装はしていないが、型チェックだけは行いたいという時に利用します。このような状況の一つの例としては複数のメソッドを必要としているトレイトのメソッドの一つを実装しようと試みている時などです。代わりに書きたくなるでしょう。インタフェースはかなり不安定であり、バグはさらに追跡が困難になります。引き換えに、任意のコードをコンパイラ中で実行できるという自由度を得ることができます。構文拡張プラグインがしばしば「手続きマクロ」と呼ばれるのはこのためです。libcollectionsにおける実際の実装と、ここで示したコードは効率性や再利用性のために異なります。