Rust: рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд┐рдирд╛ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдПрд▓реАрд╢рди рдмрд╣реБрдд рд▓рд╛рд▓рдЪреА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдлрд╝рд░ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рдЕрдЧрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдХреЛ рдЬрд┐рддрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдЙрдзрд╛рд░ рд▓реЗрддрд╛ рд╣реИ:

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
A-closures A-inference A-lifetimes C-bug NLL-fixed-by-NLL T-compiler

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЯреНрд░рд╛рдЗрдПрдЬ: рдЕрдм 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

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдмрд╕ рдЦреЛрдЬ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдмреНрдж рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП: рдЖрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдордВрдЪ рдкрд░ рдЗрд╕рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдпрд╣ рдордЬрдмреВрдд рдзрд╛рд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ |x: &u8| рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдПрдЪрдЖрд░рдЯреАрдмреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд: рдореИрдВ рдЗрд╕рдореЗрдВ рднреА рднрд╛рдЧ рдЧрдпрд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣реНрдпреВрди рдХрд╛ рдЕрдХреНрдЯреВрдмрд░ рдЙрджрд╛рд╣рд░рдг), рдЬреЛ рджреВрд╕рд░реА рджрд┐рд╢рд╛ рдореЗрдВ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ; рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдХреЗрд╡рд▓ _рдмрд┐рдирд╛_рд╕реНрдкрд╖реНрдЯ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: 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

рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдпрд╣ рдЕрдм рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд░рд╛рдд рдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

wthrowe picture wthrowe  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dtolnay picture dtolnay  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mcarton picture mcarton  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

defuz picture defuz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

SharplEr picture SharplEr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ