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