いずれかを呼んで正規化をしています。modern_and_legacyが呼ばれる場面として重要なのが「値名前空間でレキシカルスコープ解決をするとき」です。衛生性が有効だった場面に他なりません。スコープで解決されることはありません。スコープで探索を再開する仕組みになっています。これにより、「マクロ展開前の構造に基づいてレキシカルスコープで解決する」という衛生性の目標をより広く達成できるようになっています。インポート解決とマクロRustのマクロは元々、構文解析の後・名前解決の前に展開されていました。今でも後方定義を許容しません。}}現在は、マクロ解決は部分的に名前解決に統合されています。参照したりできています。log::info!("bar");}これはつまり、インポート解決をしなければマクロが展開できない場合があるということです。一方で、マクロは任意のアイテムに展開できるので、マクロの展開により新たなインポート解決が必要になる可能性もあります。いう2大クレートと、その周辺クレートから成り立っています。依存するという形でコードベースが分割されています。側にDIのようなインターフェースが用意されています。このような「パスを渡すとマクロ定義への解決を試みてくれるオラクル」を受け取り、これを使いながらマクロを展開していきます。名前解決器にビルトインマクロを登録する。名前解決器を使って、マクロを展開する。いう3段階の処理をしています。未展開のマクロは名前解決にとってはいくつか困った問題があります。未展開マクロは任意の名前を追加で定義しうる。