その親モジュールの正規祖先という風に定義できます。とろうとするとエラーになります。接頭辞のないパスはグローバルかローカルのいずれかに解決されます。ここまでの議論では完全に無視していましたが、とうとうローカル束縛のことも考えてあげる必要が出てきます。(なお、「匿名モジュール(ブロック)内で定義されたアイテム」はこの意味ではグローバルです)接頭辞のないパスの1セグメント目は以下の優先度で解決されます。接頭辞のないパスはresolve_ident_in_lexical_scopeで解決されます。いう階層で処理されます。それとは別にラベルを管理するリブがあります。クロージャは引数束縛があるので値名前空間にリブを作ります。let束縛があるので値名前空間にリブを作ります。ジェネリクスは型名前空間にリブを作ります。モジュール自身もリブです。y}レキシカルスコープで名前を解決するときは、今いる位置で有効なリブを下から上に遡って探索していきます。モジュールリブなら、さらにグローバルな名前の解決も試みます。正規モジュールのリブに到達したら、そこで探索を終了します。内・その場所で有効な定義のうち、最も近いものに解決されることになります。判定され、キャプチャー可能性など意味的な条件は使われません。関数xではなく、関数fの引数xに解決される。関数は環境をキャプチャーできないのでエラーになる。型エイリアスTではなく、関数gの型パラメーターTに解決される。function}また、シャドウイングが別途禁止されている場合もあります。同名の束縛を導入するとエラーになります。statics}ローカル定義とグローバル定義の間にも、基本的には最近優先のルールが適用できます。}}ただし、グローバル定義のタイムトラベルに注意が必要です。匿名モジュールのリブはここから開始する(→ブロックの終わりまで)。letに対応するリブはここから開始する(→ブロックの終わりまで)。staticなどグローバルに置けるもの)はモジュール(匿名モジュールの場合はブロック)の先頭に移動したと思って考えるとわかりやすいです。広範囲のマクロ衛生性をサポートしています。m1::f!();}この場合、マクロを展開すると以下のようになります。由来しているので、さらなる探索が行われます。preludeへのフォールバックが調べられます。ように書いたときに標準ライブラリが参照されるのはこの仕組みによるものです。定義されていなければ、既知のツール属性モジュールへのフォールバックが調べられます。ツール属性とはRFC2103で規定されている、「コンパイラは知らないが周辺ツールが知っている属性名」を安全に導入する仕組みです。rustfmtで特定のアイテムのフォーマットを抑止するには以下のようにしていました。書けばよさそうに見えますが、RFC0572で規定されている通りコンパイラは前方互換性のために未知の属性をエラーにすることになっています。いうrustfmt処理時しか有効にならないcfgで条件をつけてやる必要がありました。RFC2103はこれを解決するために属性のモジュール化をするもので、これにより次のように書けるようになりました。{}これは通常の名前解決の仕組みにある程度乗っかっています。解決されていることになります。RFC0572に言及されているように、当面の実装ではツール名は固定です。既知のツール名として扱われています。このため以下のような奇妙なコードのコンパイルが通ります。定義されていなければ、通常のプレリュードへのフォールバックが調べられます。知られているようにRustの標準ライブラリにはpreludeモジュールがあり、この中にあるアイテムは明示的なインポートなしで使用できるようになっています。::std::prelude::v1::*;埋め込まれるモジュールは実際には条件によって異なります。指定されたときは、何も埋め込まれません。指定されたときは、以下の2通りのどちらかになります。