Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ Π·Π°ΠΈΠΌΡΡΠ²ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ:
fn main () {
let f = |y| { println!("{}", y); };
let x = 4u8;
f(&x);
}
Π§ΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
error: `x` does not live long enough
--> ./test.rs:5:1
|
4 | f(&x);
| - borrow occurs here
5 | }
| ^ `x` dropped here while still borrowed
|
= note: values in a scope are dropped in the opposite order they are created
ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ²Π½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΠΌ ΡΠΈΠΏ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ:
fn main () {
let f = |y: &u8| { println!("{}", y); };
let x = 4u8;
f(&x);
}
ΠΠ΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° ΠΈΠ»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π― ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΡΠΌΠΎΠ³ Π½Π°ΠΉΡΠΈ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
rustc --version --verbose
:
rustc 1.17.0-nightly (24a70eb59 2017-02-09)
binary: rustc
commit-hash: 24a70eb598a76edb0941f628a87946b40f2a1c83
commit-date: 2017-02-09
host: x86_64-unknown-linux-gnu
release: 1.17.0-nightly
LLVM version: 3.9
ΠΡΠΎΡΡΠΎ ΡΡΠΎΠ±Ρ ΠΎΡΠ±ΡΠΎΡΠΈΡΡ ΡΠ΅ΡΠΌΠΈΠ½ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ
ΡΠΈΡΡΠ΅ΠΌ: ΠΈΠ·ΡΡΠ°Ρ ΡΡΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π½Π° ΡΠΎΡΡΠΌΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Ρ ΠΌΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠΈΠ»ΠΎΡΡ ΡΠΈΠ»ΡΠ½ΠΎΠ΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ |x: &u8|
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½Π° Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½ ΡΠ»ΡΠΆΠΈΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΎΠΉ Π΄Π»Ρ HRTB.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ Ρ ΡΡΠΈΠΌ: Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΡΠΈΠΌ (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ ΠΎΠΊΡΡΠ±ΡΡΡΠΊΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ huon), ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊΠ°ΠΊ Π½ΠΈ ΡΡΡΠ°Π½Π½ΠΎ, Π»ΠΎΠΌΠ°Π΅ΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ; ΡΠΎ Π΅ΡΡΡ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π±Π΅Π· ΡΠ²Π½ΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ: https://github.com/rust-lang/rust/issues/22557
Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°: ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π½Π° 2018 Π³ΠΎΠ΄.
ΠΡΠΈΠ±ΠΊΠΈ 2015 Π³ΠΎΠ΄Π°:
error[E0597]: `x` does not live long enough
--> src/main.rs:4:8
|
4 | f(&x);
| ^ borrowed value does not live long enough
5 | }
| - `x` dropped here while still borrowed
|
= note: values in a scope are dropped in the opposite order they are created
rustc: 1.32.0
ΠΠ°ΠΊΡΡΡΠΈΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎ Π½ΠΎΡΠ°ΠΌ Π² Π»ΡΠ±ΠΎΠΌ ΠΈΠ· Π²ΡΠΏΡΡΠΊΠΎΠ²
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°: ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π½Π° 2018 Π³ΠΎΠ΄.
ΠΡΠΈΠ±ΠΊΠΈ 2015 Π³ΠΎΠ΄Π°:
rustc: 1.32.0