рдЬрдВрдЧ 1.38.0 рд░рд┐рд▓реАрдЬ: рдореИрдХреНрд░реЛ рдФрд░ рдПрд╕рдЯреАрдбреА рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрдб рд╕рдВрдХрд▓рди, # [рдкрджрд╛рд╡рдирдд] :: рдХреЛрдИ :: typename

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


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


rustup update stable 

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


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


рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдХрд╛ рдореБрдЦреНрдп рдЖрдХрд░реНрд╖рдг рдкрд╛рдЗрдкрд▓рд╛рдЗрдЬрд╝реНрдб рд╕рдВрдХрд▓рди рд╣реИред


рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдВрдХрд▓рди


рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕реЗрдВрдмрд▓ рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рди рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдг рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХреЗрд╡рд▓ рдЙрдирдХреЗ "рдореЗрдЯрд╛рдбреЗрдЯрд╛" (рдкреНрд░рдХрд╛рд░, рдирд┐рд░реНрднрд░рддрд╛, рдирд┐рд░реНрдпрд╛рдд рдЖрджрд┐ рдХреА рд╕реВрдЪреА)ред 1.38.0 Rust рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░, рдХрд╛рд░реНрдЧреЛ рддреБрд░рдВрдд рдЕрдкрдиреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реА рдирд┐рд░реНрднрд░ рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред


рдПрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХрдо рдирд╣реАрдВ рд╣реБрдЖ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЕрдиреБрдХреВрд▓рд┐рдд рдмрд┐рд▓реНрдб (рдЬрд╣рд╛рдВ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВ) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдХрд▓рди рдХреА рдЧрддрд┐ 10% -20% рддрдХ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрдХрд▓рди рдЧрддрд┐ рдореЗрдВ рдордЬрдмреВрдд рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реБрдИред рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рд╕рдВрдХрд▓рди рд╕рдВрд╕реНрдХрд░рдг 1.38.0 рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИред


mem::{uninitialized, zeroed} рдХреБрдЫ рджреБрд░реБрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ mem::{uninitialized, zeroed}


рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , std::mem::uninitialized рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ MaybeUninit<T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред


mem::uninitialized рдлрд╝рдВрдХреНрд╢рди рдЕрднреА рддрдХ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, 1.38.0 рдкрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░, mem::uninitialized рдпрд╛ mem::zeroed рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЧрд▓рдд рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдПрдХ рд╕рдВрдХреАрд░реНрдг рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП rustc рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред


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


 struct Wrap<T>(T); struct Outer(Wrap<Wrap<Wrap<Box<i32>>>>); struct CannotBeZero { outer: Outer, foo: i32, bar: f32 } ... let bad_value: CannotBeZero = unsafe { std::mem::uninitialized() }; 

рдЪреМрдХрд╕ рдкрд╛рдардХреЛрдВ рдХреЛ рдиреЛрдЯрд┐рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬреЛ рд╢реВрдиреНрдп рд╕реЗ рдирд╣реАрдВ рднрд░реЗ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ NonNull<T> рдФрд░ NonZero<T> ред рдЕрдм рддрдХ, mem::uninitialized рд╕рд╛рде рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг mem::uninitialized рдпрд╛ mem::zeroed рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдпреЗ рдЪреЗрдХ mem::uninitialized рдХреЗ рдЕрдиреБрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ mem::uninitialized рдпрд╛ mem::zeroed , рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдПрдХ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдЧрд▓рдд рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ MaybeUninit рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


#[deprecated] рд▓рд┐рдП #[deprecated]


#[deprecated] рд╡рд┐рд╢реЗрд╖рддрд╛, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд░рд╕реНрдЯ 1.9.0 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкреИрдХреЗрдЬ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдкреБрд░рд╛рдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╡реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╣рдЯрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдЬрдВрдЧ 1.38.0 рдЖрдк рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


std::any::type_name


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


 fn gen_value<T: Default>() -> T { println!("Initializing an instance of {}", std::any::type_name::<T>()); Default::default() } fn main() { let _: i32 = gen_value(); let _: String = gen_value(); } 

рдкрд░рд┐рдгрд╛рдо:


 Initializing an instance of i32 Initializing an instance of alloc::string::String 

рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рддрд░рд╣, рдХреЗрд╡рд▓ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рдЯреАрдХ рд╕рд╛рдордЧреНрд░реА рдФрд░ рдкреНрд░рд╛рд░реВрдк рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд░реНрдгрди рд╣реИ; рдХрдИ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдПрдХ рд╣реА type_name рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред


рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди


рд╕рд┐рдВрдЯреИрдХреНрд╕ , рдХрд╛рд░реНрдЧреЛ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░, рдФрд░ рдХреНрд▓рд┐рдкреНрдкреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рднреА рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЧреБрдЬрд░реЗ рд╣реИрдВред


рд╕рджрд╕реНрдп 1.38.0


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


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


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


рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ andvvlex , nlinker , funkill рдФрд░ Gymmasssorla рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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


All Articles