рдЬрдВрдЧ 1.41.1 рд░рд┐рд▓реАрдЬ: рд╕реБрдзрд╛рд░рд╛рддреНрдордХ рд░рд┐рд▓реАрдЬ

рд░рд╕реНрдЯ рдЯреАрдо рдиреЗ 1.41.1 рд░реБрд╕реНрдЯ рдХреА рдПрдХ рдирдИ рд╕реБрдзрд╛рд░рд╛рддреНрдордХ рд░рд┐рд▓реАрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА рд╣реИред рдЬрдВрдЧ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рд╕рднреА рдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рдХреБрд╢рд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред


рдпрджрд┐ рдЖрдкрдиреЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд╕реНрдЯ рдХрд╛ рдкрд┐рдЫрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ rustup, рддреЛ рд╕рдВрд╕реНрдХрд░рдг 1.41.1 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


rustup update stable

рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ rustup, рддреЛ рдЖрдк рдЗрд╕реЗ рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреГрд╖реНрда рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг 1.41.1 рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ


рдЬрдВрдЧ 1.41.1 рд░реВрд╕реНрдЯ 1.41.0 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ: рд╕реНрдерд┐рд░ рдЬреАрд╡рдирдХрд╛рд▓ рдореЗрдВ рдЧрд▓рддрддрд╛ рдФрд░ рдЧрд▓рдд рд╕рдВрдХрд▓рди рдЬреЛ рд╡рд┐рднрд╛рдЬрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдпреЗ рдкреНрд░рддрд┐рдЧрдорди рд░реБрд╕реНрдЯ рдХреЗ рдкрд┐рдЫрд▓реЗ рд░рд┐рд▓реАрдЬ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд░рд╕реНрдЯ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 1.41.0 рдХреЛ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВред рдЬреАрд╡рдирдХрд╛рд▓ 'staticрдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ Copyрд░реБрд╕реНрдд 1.0 рдХреЗ рдмрд╛рдж рд╕реЗ рдореМрдЬреВрдж рдереА рдФрд░ рдЗрд╕ рд░рд┐рд▓реАрдЬ рд╕реЗ рднреА рддрдп рд╣реИред


staticрддрддреНрд╡ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓рддрд╛


рд░рд╕реНрдЯ 1.41.0 рдореЗрдВ, staticрдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдХрд╛рд░рдг , рдЙрдзрд╛рд░ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЧрд▓рддреА рд╕реЗ рдХреБрдЫ рдЧрд▓рдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЙрдзрд╛рд░ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ staticрддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА ред рдпрд╣, рдмрд╛рд░реА рдореЗрдВ, рдпрд╣ рдПрдХ рдЬреАрд╡рди рднрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдХреЗ рд╕рд╛рде рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рдпрд╛ 'staticрдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП staticрдЪрд░:


static mut MY_STATIC: &'static u8 = &0;

fn main() {
    let my_temporary = 42;
    unsafe {
        //     1.41.0:
        MY_STATIC = &my_temporary;
    }
}

1.41.1 рдореЗрдВ, рдРрд╕рд╛ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛:


error[E0597]: `my_temporary` does not live long enough
 --> src/main.rs:6:21
  |
6 |         MY_STATIC = &my_temporary;
  |         ------------^^^^^^^^^^^^^
  |         |           |
  |         |           borrowed value does not live long enough
  |         assignment requires that `my_temporary` is borrowed for `'static`
7 |     }
8 | }
  | - `my_temporary` dropped here while still borrowed

рдЖрдк рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ # 69114 рдФрд░ рдкреАрдЖрд░ рдореЗрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ ред


CopyрдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди'static


рдЬрдВрдЧ 1.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:


#[derive(Clone)]
struct Foo<'a>(&'a u32);
impl Copy for Foo<'static> {}

fn main() {
    let temporary = 2;
    let foo = (Foo(&temporary),);
    drop(foo.0); //     `foo`.
    drop(foo.0); //     .
}

рдЬрдВрдЧ 1.41.1 рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдКрдкрд░ рдХреЗ рд╕рдорд╛рди рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рддрдп рдХреА рдЧрдИ рд╣реИ ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЕрдм рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:



error[E0597]: `temporary` does not live long enough
  --> src/main.rs:7:20
   |
7  |     let foo = (Foo(&temporary),);
   |                    ^^^^^^^^^^ borrowed value does not live long enough
8  |     drop(foo.0);
   |          ----- copying this value requires that
   |                `temporary` is borrowed for `'static`
9  |     drop(foo.0);
10 | }
   | - `temporary` dropped here while still borrowed

- , Foo<'a>, 'a, Copy , 'a: 'static. temporary '0 'static , , Foo<'0> Copy, drop .


, .


, Rust 1.41.0, . , , . , LLVM, LLVM 9 LLVM 10.


Rust 1.41.0 LLVM 9 Rust 1.41.1 , . : #69225.


1.41.1


, Rust 1.41.1. , !



Rust - .


All Articles