铁锈寿命的概念
The concept of rust lifetime
问题
我平时用的是c++ lang,最近在学rust lang,现在对lifetime的概念很迷惑。
我对一生的理解如下。这是正确的吗?
- 生命周期是实例的一个属性。
- 生命周期表示实例的有效范围。
上述问题的背景
以下代码是here.
的示例代码
{
let r; // ---------+-- 'a
// |
{ // |
let x = 5; // -+-- 'b |
r = &x; // | |
} // -+ |
// |
println!("r: {}", r); // |
} // ---------+
document说'a是一生,'b也是一生
但如果我的理解是正确的,'a 不是生命周期,只是符号 r 的范围......真的是生命周期吗?
P.S.
There are two things named "a lifetime": value's lifetime, and the lifetime attached to a reference.
谢谢!可能我比以前明白了一点...
生命周期与其说是实例的属性,不如说是相反的方式;当一个实例被借用(引用被引用)时,它被借用了一个特定的生命周期。借用检查器将尽量缩短借用的生命周期,以便尽可能宽容,同时确保代码仍然安全。
生命周期是您向编译器传达您需要引用持续多长时间的方式,根据该信息,编译器将检查是否没有任何内容违反该规则(通过持有引用更长时间),并且引用至少在您需要时可用。这可以被认为与编译器可以检查类型以确保您不会将浮点数分配给整数的方式大致相同。
生命周期也独立于作用域。 Rust 现在有 non-lexical 个生命周期(https://github.com/rust-lang/rfcs/pull/2094 — see What are non-lexical lifetimes? 更详细的解释),这意味着在给定范围内,借用检查器能够确定借用的生命周期比包含范围短。
问题
我平时用的是c++ lang,最近在学rust lang,现在对lifetime的概念很迷惑。
我对一生的理解如下。这是正确的吗?
- 生命周期是实例的一个属性。
- 生命周期表示实例的有效范围。
上述问题的背景
以下代码是here.
的示例代码 {
let r; // ---------+-- 'a
// |
{ // |
let x = 5; // -+-- 'b |
r = &x; // | |
} // -+ |
// |
println!("r: {}", r); // |
} // ---------+
document说'a是一生,'b也是一生
但如果我的理解是正确的,'a 不是生命周期,只是符号 r 的范围......真的是生命周期吗?
P.S.
There are two things named "a lifetime": value's lifetime, and the lifetime attached to a reference.
谢谢!可能我比以前明白了一点...
生命周期与其说是实例的属性,不如说是相反的方式;当一个实例被借用(引用被引用)时,它被借用了一个特定的生命周期。借用检查器将尽量缩短借用的生命周期,以便尽可能宽容,同时确保代码仍然安全。
生命周期是您向编译器传达您需要引用持续多长时间的方式,根据该信息,编译器将检查是否没有任何内容违反该规则(通过持有引用更长时间),并且引用至少在您需要时可用。这可以被认为与编译器可以检查类型以确保您不会将浮点数分配给整数的方式大致相同。
生命周期也独立于作用域。 Rust 现在有 non-lexical 个生命周期(https://github.com/rust-lang/rfcs/pull/2094 — see What are non-lexical lifetimes? 更详细的解释),这意味着在给定范围内,借用检查器能够确定借用的生命周期比包含范围短。