関係書目マクロRustが提供している多くのコードの再利用や抽象化に利用できるツールを学びました。それらのコードの再利用のユニットは豊富な意味論的構造を持っています。関数は型シグネチャ、型パラメータはトレイト境界、オーバーロードされた関数はトレイトに所属していなければならない等です。このような構造はRustのコアの抽象化が強力なコンパイル時の正確性のチェックを持っているという事を意味しています。それは柔軟性の減少というコストを払っています。それらをジェネリックな関数やトレイトや、他のRustのセマンティクスとして表現することが困難であると気がつくかもしれません。マクロは構文レベルでの抽象化をすることを可能にします。マクロ呼出は「展開された」構文への短縮表現です。展開はコンパイルの初期段階、すべての静的なチェックが実行される前に行われます。その結果として、マクロはRustのコアの抽象化では不可能な多くのパターンのコードの再利用を可能としています。マクロベースのコードの欠点は、組み込みルールの少なさに由来するそのコードの理解のしづらさです。普通の関数と同じように、良いマクロはその実装について理解しなくても使うことができます。展開した結果のコードの中の問題について書かれているために、とても理解しづらいです。これらの欠点はマクロを「最終手段となる機能」にしています。マクロを使うことで簡潔になったり、適切な抽象化が可能になる場面がしばしば存在するからです。このトレードオフを頭に入れておいて欲しいのです。任意の要素で初期化するために使われていました。任意の個数の引数を取るためです。};}ワオ!たくさんの新しい構文が現れました!細かく見ていきましょう。