Rust

高度な lifetime

Higher-ranked trait bounds (HRTB)、lifetime subtyping、variance (covariant、contravariant、invariant)、'static と 'a、NLL

20 面接問題·
Senior
1

Rust における Higher-Ranked Trait Bound (HRTB) とは何ですか?

回答

Higher-Ranked Trait Bound (HRTB) を使うと、関数や trait が特定の lifetime だけでなく、考えられるすべての lifetime に対して機能する必要があることを指定できます。for<'a> という構文は、呼び出し側が選ぶ任意の lifetime 'a に対して trait bound が満たされなければならないことを示します。この機能は、さまざまな lifetime を持つ参照を受け取る必要がある closure や callback にとって不可欠です。

2

fn foo<'a>(f: impl Fn(&'a str)) と fn foo(f: impl for<'a> Fn(&'a str)) の違いは何ですか?

回答

fn foo<'a> の場合、lifetime 'a は呼び出し時に呼び出し側によって固定され、実行全体を通じて同じままです。for<'a> の場合、closure は任意の lifetime に対して機能しなければならず、異なる lifetime の参照で複数回呼び出すことができます。この違いは、異なる一時参照で closure を複数回呼び出す API にとって極めて重要です。

3

Rust における lifetime subtyping とは何ですか、また 'a: 'b は何を意味しますか?

回答

lifetime subtyping は、lifetime 間の subtyping 関係を確立します。'a: 'b という表記は、'a が少なくとも 'b と同じだけ生存することを意味し、したがって 'a は 'b の subtype です。より長い lifetime を持つ参照は、より短い lifetime が期待される場所で使用できます。この関係はイミュータブルな参照に対して covariant であり、より短い lifetime で十分な場所により長い lifetime を持つ参照を渡すことができます。

4

Rust における variance とは何ですか、また generic 型にどのような影響を与えますか?

5

なぜ &mut T は T に対して invariant であるのに対し、&T は covariant なのですか?

+17 面接問題

次の面接に向けてRustをマスター

すべての問題、flashcards、技術テスト、コードレビュー演習、面接シミュレーターにアクセス。

無料で始める