рдЬрдВрдЧ 1.35.0 рд░рд┐рд▓реАрдЬ: рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЕрдиреНрдп рдирд╡рд╛рдЪрд╛рд░

рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рд╕рднреА рдХреА рдкрд╕рдВрджреАрджрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд░рд╕реНрдЯ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдкреНрд░рдХрд╛рд╢рди рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред


рдкрд░рд┐рдЪрдп


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


рдпрджрд┐ рдЖрдкрдиреЗ рдЬрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрдВрдЧ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛:


 $ rustup update stable 

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


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


рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рдХреНрд░рдорд╢рдГ Box<dyn FnOnce> , Box<dyn FnMut> рдФрд░ Box<dyn Fn> рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ FnOnce, FnMut рдФрд░ Fn FnMut рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИред


рд╕рд╛рде рд╣реА рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди (рдХреНрд▓реЛрдЬрд░) рдХреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдлрдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред dbg! Rust 1.32.0 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдм рддрд░реНрдХреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд░рд┐рд▓реАрдЬ рдиреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрдИ рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреЗрд╢ рдХрд┐рдПред рдиреАрдЪреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрд▓рдмреНрдз рд╣реИред


Fn* Box<dyn Fn*> рдкрд░ рд▓рд╛рдЧреВ рдЧреБрдг Box<dyn Fn*>


рдЬрдВрдЧ рдореЗрдВ 1.35.0, FnOnce , FnMut рдФрд░ Fn FnMut Box<dyn FnOnce> , Box<dyn FnMut> рдФрд░ Box<dyn Fn> рд╣реЛрддреЗ рд╣реИрдВред


рдЕрддреАрдд рдореЗрдВ, рдпрджрд┐ рдЖрдк Box<T> FnBox рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рдЖрдкрдХреЛ FnBox рдХрд╛ рдЙрдкрдпреЛрдЧ FnBox , рдХреНрдпреЛрдВрдХрд┐ Box<dyn FnOnce> рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╕рдВрдмрдВрдзрд┐рдд Fn* рд▓рдХреНрд╖рдг рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рдиреЗ Box<T> рдореЗрдВ рдЙрд╕ рдХреЛрдб рдХреЛ рдлрдВрд╕реЗ рд╣реБрдП рдХрд╛рд░реНрдп рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рджрд┐рдпрд╛ рдЬреЛ Fn рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ (рдпрд╣ рдЕрд╕реНрдерд╛рдпреА рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдерд╛)ред


рдРрд╕рд╛ рд╕рдВрдХрд▓рдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рдЕрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖ рдерд╛ред рдЗрд╕ рджреЛрд╖ рдХреЛ unsized_locals рдХреА рд╢реБрд░реВрдЖрдд рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рдЖрдк Box<T> рдореЗрдВ рдлрд╝рдВрд╕реЗ рд╣реБрдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВ:


 fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> { vec![1, 2, 3, 4].into_iter().map(x).collect() } 

Box<dyn FnOnce> рдХреЛ Box<dyn FnOnce> рдЙрдкрджреНрд░рд╡ рдХреЗ рдмрд┐рдирд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 fn foo(x: Box<dyn FnOnce()>) { x() } 

рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдкреЙрдЗрдВрдЯрд░реНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛


1.19.0 рд░рд╕реНрдЯ рдХреЗ рд╕рдордп рд╕реЗ , рдПрдВрдмреЗрдбреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдореЗрдВ рдХреИрдкреНрдЪрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:


 fn twice(x: u8, f: fn(u8) -> u8) -> u8 { f(f(x)) } fn main() { assert_eq!(42, twice(0, |x| x + 21)); } 

рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдмрджрд▓рд╛рд╡ рдкреЗрд╢ рдХрд┐рдП:


 ///  ,   `unsafe fn`. unsafe fn call_unsafe_fn_ptr(f: unsafe fn()) { f() } fn main() { // :     //       //  unsafe { call_unsafe_fn_ptr(|| { dbg!(); }); } } 

рдХреЙрд▓ dbg!() рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ


println! рдХреЙрд▓ рдХреА рдкреНрд░рдЪреБрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг println! рд╕рд╛рдореВрд╣рд┐рдХ рдлрд╛рд░реНрдо рдбрд┐рдмрдЧрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдбреАрдмреАрдЬреА рдореИрдХреНрд░реЛ рдХреЛ рд░реВрд╕реНрдЯ 1.32.0 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ dbg! ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдореИрдХреНрд░реЛ рдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


 fn main() { let mut x = 0; if dbg!(x == 1) { x += 1; } dbg!(x); } 

рдХреЛрдб рдХреА рдЙрдкрд░реЛрдХреНрдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдХреНрд░рдорд╢рдГ x == 1 рдФрд░ x рдХреЗ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЫрд╛рдкреЗрдВрдЧреА:


 [src/main.rs:4] x == 1 = false [src/main.rs:8] x = 0 

рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди call_unsafe_fn_ptr рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, call_unsafe_fn_ptr dbg!() рднреА рдмрд┐рдирд╛ рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдпрд╣ рдЪрдпрдирд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢рд╛рдЦрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:


 fn main() { let condition = true; if condition { dbg!(); // [src/main.rs:5] } } 

рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕реНрдерд┐рд░реАрдХрд░рдг


рд░рд╕реНрдЯ 1.35.0 рдореЗрдВ, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрдИ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдпрд╣рд╛рдБ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред


рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдХреЗ рд╕рд╛рдЗрди рдХреЛ рджреВрд╕рд░реЗ рдирдВрдмрд░ рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ


рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде, рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡реНрд╕ рдореЗрдВ рдирдП copysign рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ (рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, f32 рдФрд░ f64 ):



рд╕реБрдЭрд╛рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рдВрдХреЗрдд рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 fn main() { assert_eq!(3.5_f32.copysign(-0.42), -3.5); } 

рдпрд╣ рдЬрд╛рдБрдЪрдирд╛ рдХрд┐ рдХреНрдпрд╛ Range рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рд╣реИ


рд░рд╕реНрдЯ 1.35.0 рдиреЗ Range* рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдкрд░ рдХреБрдЫ рдирдП рддрд░реАрдХреЛрдВ рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛:



рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рдПрдХ рд╕реАрдорд╛ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:


 fn main() { if (0..=10).contains(&5) { println!("5    [0; 10]."); } } 

рдЕрдиреБрд╡рд╛рдж (рдирдХреНрд╢рд╛) рдФрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдЙрдзрд╛рд░ RefCell


1.35.0 RefCell рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЖрдк рдЙрдзрд╛рд░ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдЙрдзрд╛рд░ рдХрд┐рдП рдЧрдП RefCell рдореВрд▓реНрдп рдХреЛ рдЙрдзрд╛рд░ рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RefCell рдорд╛рди RefCell


рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ RefCell рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдШреЛрд╖рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ RefCell replace_with рдкрд░рд┐рдЪрдп RefCell рд╣реИ:



рдХрд┐рд╕реА рдкреЙрдЗрдВрдЯрд░ рдпрд╛ рд▓рд┐рдВрдХ рдХреЛ рд╣реИрд╢ рдХрд░реЗрдВ


рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ ptr::hash рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреА рд╣реИ, рдЬреЛ рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдЪреНрдЪрд╛ рдкреЙрдЗрдВрдЯрд░ рд▓реЗрддрд╛ рд╣реИред ptr::hash рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкрддреЗ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдпрд╛ рд╕рдВрджрд░реНрднрд┐рдд рдорд╛рди рдХрд╛ рд╣реИрд╢ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд╕рд╛рдордЧреНрд░реА Option<&T> рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ Option<&T>


Rust 1.0.0 рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рде, Option::cloned Option<&T> рдкрд░ Option::cloned рддрд░реАрдХреЛрдВ рдФрд░ Option<&mut T> рдиреЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ рдерд╛ рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рдерд╛ ( Some(_) )ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреНрд▓реЛрдирд┐рдВрдЧ рдХрднреА-рдХрднреА рдПрдХ рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ opt.cloned() рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдХреЗрдд рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдиреЗ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛:



opt.copied() рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ opt.copied() рдХреЗ рд╕рдорд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рд╢рд░реНрддреЛрдВ T: Copy рдЕрдиреБрд░реЛрдз рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХреА рд╡рд┐рдлрд▓рддрд╛ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧреАред


рдХреНрд▓рд┐рдкреА рдкрд░рд┐рд╡рд░реНрддрди


рдХреНрд▓рд┐рдкреНрдкреА, рдПрдХ рдЙрдкрдХрд░рдг рдЬреЛ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЦрд╛рдорд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдиреЗ drop_bounds рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг drop_bounds ред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рд╢рд░реНрдд рдХреА рдкреВрд░реНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ T: Drop :


 fn foo<T: Drop>(x: T) {} 

рдпрд╣ рдЕрдХреНрд╕рд░ рдПрдХ рдЧрд▓рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрджрд┐рдо Drop рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, T: Drop String рдЬреИрд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрдирд▓рд╛рдЗрди рдкреНрд░рдХрд╛рд░ (рдЬреИрд╕реЗ Vec<u8> ) рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИред


drop_bounds рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ redundant_closure рдХреЛ redundant_closure рдФрд░ redundant_closure_for_method_calls рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреА рд╣реИ ред


рдХреНрд▓реАрдкреА рдХреА рд╡рд┐рд╕реНрддреГрдд рд░рд┐рд▓реАрдЬрд╝ рдпрд╣рд╛рдБ рдкрдврд╝реЗрдВред


рдХрд╛рд░реНрдЧреЛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди


рдХрд╛рд░реНрдЧреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред


рд╕рджрд╕реНрдп 1.35.0


рд░рд╕реНрдЯ 1.35.0 рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ рдПрдХ рд╕рд╛рде рдЖрдПред рд╣рдо рдЖрдк рд╕рднреА рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗ, рдзрдиреНрдпрд╡рд╛рдж !


рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ


рд░рд╕реНрдЯ рднрд╛рд╖рд╛ рдкрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде, рд╡реЗ рд░реВрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдЯ рдореЗрдВ рдпрд╛ рдирд╡рд╛рдЧрдВрддреБрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдЪреИрдЯ рдореЗрдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

Source: https://habr.com/ru/post/hi453338/


All Articles