Rust 1.38 рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкреНрд░рдХрд╛рд╢рди

рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкреНрд░рдХрд╛рд╢рди рдЧрдВрдЬ 1.38, Mozilla рдкреНрд░рдХрд▓реНрдкрд╛рджреНрд╡рд╛рд░реЗ рд╕реНрдерд╛рдкрд┐рдд. рднрд╛рд╖рд╛ рдореЗрдорд░реА рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ, рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдореЗрдорд░реА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рдЖрдгрд┐ рдХрдЪрд░рд╛ рдЧреЛрд│рд╛ рдХрд░рдгрд╛рд░реЗ рдХрд┐рдВрд╡рд╛ рд░рдирдЯрд╛рдЗрдо рди рд╡рд╛рдкрд░рддрд╛ рдЙрдЪреНрдЪ рдХрд╛рд░реНрдп рд╕рдорд╛рдВрддрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рдЪреЗ рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ.

рд░рд╕реНрдЯрдЪреЗ рдСрдЯреЛрдореЕрдЯрд┐рдХ рдореЗрдорд░реА рдореЕрдиреЗрдЬрдореЗрдВрдЯ рдбреЗрд╡реНрд╣рд▓рдкрд░рд▓рд╛ рдкреЙрдЗрдВрдЯрд░ рдореЕрдирд┐рдкреНрдпреБрд▓реЗрд╢рдирдкрд╛рд╕реВрди рдореБрдХреНрдд рдХрд░рддреЗ рдЖрдгрд┐ рд▓реЛ-рд▓реЗрд╡реНрд╣рд▓ рдореЗрдорд░реА рдореЕрдирд┐рдкреНрдпреБрд▓реЗрд╢рдирдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд░реНтАНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг рдХрд░рддреЗ, рдЬрд╕реЗ рдХреА рдЖрдлреНрдЯрд░-рдлреНрд░реА рдореЗрдорд░реА рдНрдХреНрд╕реЗрд╕, рдирд▓ рдкреЙрдЗрдВрдЯрд░ рдбрд┐рд░реЗрдлрд░реЗрдиреНрд╕реЗрд╕, рдмрдлрд░ рдУрд╡реНрд╣рд░рд░рдиреНрд╕ рдЖрдгрд┐ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛. рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рдВрдЪреЗ рд╡рд┐рддрд░рдг, рдЕрд╕реЗрдВрдмрд▓реА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдкреНрд░рдХрд▓реНрдкрд╛рджреНрд╡рд╛рд░реЗ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреЕрдХреЗрдЬ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдд рдЖрд╣реЗ. рдорд╛рд▓рд╡рд╛рд╣реВ, рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реА рдПрдХрд╛ рдХреНрд▓рд┐рдХрд╡рд░ рдорд┐рд│рд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рд▓рд╛рдпрдмреНрд░рд░реА рд╣реЛрд╕реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗ crates.io.

рдореБрдЦреНрдп рдирд╡рдХрд▓реНрдкрдирд╛:

  • рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрдВрдкрд╛рдЗрд▓реЗрд╢рди рдореЛрдб (рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗрд▓реЗрд▓рд╛) рдЬреЛрдбрд▓рд╛ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛рдЪ, рддреНрдпрд╛рдЪреЗ рд╕рдВрдХрд▓рди рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдЪреА рд╡рд╛рдЯ рди рдкрд╛рд╣рддрд╛, рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреНрд░реЗрдЯ рдкреЕрдХреЗрдЬ рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реБрд░реВ рд╣реЛрддреЗ. рдкреЕрдХреЗрдЬ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛рдирд╛, рдЕрд╡рд▓рдВрдмрдирд╛рдВрдирд╛ рдкреВрд░реНрдгрдкрдгреЗ рдПрдХрддреНрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА, рдлрдХреНрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рдХрд╛рд░, рдЕрд╡рд▓рдВрдмрди рдЖрдгрд┐ рдирд┐рд░реНрдпрд╛рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдШрдЯрдХрд╛рдВрдЪреА рд╕реВрдЪреА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рддреЗ. рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рдВрдХрд▓рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рд▓рд╡рдХрд░ рдЙрдкрд▓рдмреНрдз рдХрд░реВрди рджрд┐рд▓рд╛ рдЬрд╛рддреЛ, рддреНрдпрд╛рдореБрд│реЗ рд▓рд┐рдВрдХ рдХреЗрд▓реЗрд▓реЗ рдкреЕрдХреЗрдЬ рдЖрддрд╛ рдЦреВрдк рдЖрдзреА рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдПрдХрд▓ рдкреЕрдХреЗрдЬреЗрд╕ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдореЛрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╡рд░ рдкрд░рд┐рдгрд╛рдо рдХрд░рдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЬрд░ рдмрд┐рд▓реНрдбрдордзреНрдпреЗ рдмреНрд░рдБрдЪреНрдб рдЕрд╡рд▓рдВрдмрдирд╛рдВрд╕рд╣ рдкреЕрдХреЗрдЬреЗрд╕ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рддреАрд▓, рддрд░ рдПрдХреВрдг рдмрд┐рд▓реНрдб рд╡реЗрд│ 10-20% рдиреЗ рдХрдореА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ;
  • рдлрдВрдХреНрд╢рдиреНрд╕рдЪрд╛ рдЪреБрдХреАрдЪрд╛ рд╡рд╛рдкрд░ рд╢реЛрдзрдгреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ std::mem::uninitialized ╨╕ std::mem::zeroed. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, std::mem::uninitialized рддреНрд╡рд░реАрдд рдЕреЕрд░реЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рдХрдВрдкрд╛рдЗрд▓рд░рдЪреА рджрд┐рд╢рд╛рднреВрд▓ рдХрд░рддреЗ рдХрд╛рд░рдг рддреЗ рдЖрд░рдВрдн рд╣реЛрдд рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕рддреЗ, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдореВрд▓реНрдп рд╕реБрд░реВрдЪ рдирд╛рд╣реА. mem::uninitialized рдлрдВрдХреНрд╢рди рдЖрдзреАрдЪ рдирд╛рдкрд╕рдВрдд рдореНрд╣рдгреВрди рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдРрд╡рдЬреА рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ рдХрджрд╛рдЪрд┐рдд рдпреБрдирд┐рдЯ. mem::zeroed рд╕рд╛рдареА, рдпрд╛ рдлрдВрдХреНрд╢рдирдореБрд│реЗ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдЙрджреНрднрд╡реВ рд╢рдХрддрд╛рдд рдЬреЗ рд╢реВрдиреНрдп рдореВрд▓реНрдпреЗ рд╕реНрд╡реАрдХрд╛рд░реВ рд╢рдХрдд рдирд╛рд╣реАрдд.

    рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд░реНрддрди рдУрд│рдЦрдгреНрдпрд╛рдд рдорджрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдирд╡реАрди рдкреНрд░рдХрд╛рд╢рди рдХрдВрдкрд╛рдЗрд▓рд░рдордзреНрдпреЗ рд▓рд┐рдВрдЯ рдЪреЗрдХ рдЬреЛрдбрддреЗ рдЬреЗ mem::uninitialized рдХрд┐рдВрд╡рд╛ mem::zeroed рдордзреАрд▓ рдХрд╛рд╣реА рд╕рдорд╕реНрдпрд╛ рд╢реЛрдзрддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, &T рдЖрдгрд┐ BoxтА╣TтА║ рд╕рд╣ mem::uninitialized рдХрд┐рдВрд╡рд╛ mem::zeroed рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рддреНрд░реБрдЯреА рдпреЗрддреЗ, рдЬреЗ рдкреЙрдЗрдВрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛рдд рдЬреЗ рд╢реВрдиреНрдп рдореВрд▓реНрдпреЗ рд╕реНрд╡реАрдХрд╛рд░реВ рд╢рдХрдд рдирд╛рд╣реАрдд;

  • рдХреНрд░реЗрдЯ рдкреЕрдХреЗрдЬреЗрд╕ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдореНрд╣рдгреВрди рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рднрд╡рд┐рд╖реНрдпрд╛рдд рд╣рдЯрд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдорддреА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА тАЬ#[рдирд╛рдкрд╕рд▓реЗрд▓реЗ]тАЭ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ. Rust 1.38 рдиреБрд╕рд╛рд░, рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЕрдХреНрд░реЛрд╕рд╛рдареА рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ;
  • рд╕рдмрдореЙрдбреНрдпреВрд▓реНрд╕рдордзреНрдпреЗ тАЬ#[global_allocator]тАЭ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд▓реА;
  • рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдЬреЛрдбрд▓реЗ std::any::type_name, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рдХрд╛рд░рд╛рдЪреЗ рдирд╛рд╡ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ, рдЬреЗ рдбреАрдмрдЧрд┐рдВрдЧ рд╣реЗрддреВрдВрд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдЕрд╕реВ рд╢рдХрддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдХреНрдЭрд┐рдХреНрдпреВрд╢рди рджрд░рдореНрдпрд╛рди рдЖрдкрдг рдлрдВрдХреНрд╢рдирд▓рд╛ рдХреЛрдгрддреНрдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рд╕рд╛рдареА рдХреЙрд▓ рдХреЗрд▓реЗ рд╣реЗ рд╢реЛрдзреВ рд╢рдХрддрд╛:

    fn gen_valueтА╣T: рдбреАрдлреЙрд▓реНрдЯ>() -> рдЯреА {
    println!("{} рдЪреЗ рдЙрджрд╛рд╣рд░рдг рд╕реБрд░реВ рдХрд░рдгреЗ", std::any::type_name::тА╣TтА║());
    рдбреАрдлреЙрд▓реНрдЯ::рдбрд┐рдлреЙрд▓реНрдЯ()
    }

    fn main() {
    let _: i32 = gen_value(); # "i32" рдореБрджреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓
    let _: рд╕реНрдЯреНрд░рд┐рдВрдЧ = gen_value(); # "alloc::string::String" рдореБрджреНрд░рд┐рдд рдХрд░реЗрд▓
    }

  • рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░рд░реАрдЪреА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд╛рд░реНрдпреЗ:
    • slice::{concat, connect, join} рдЖрддрд╛ &T; рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд &[T] рдореВрд▓реНрдп рдШреЗрдК рд╢рдХрддреЗ;
    • "*const T" рдЖрдгрд┐ "*mut T" рдЖрддрд╛ рдорд╛рд░реНрдХрд░ рд▓рд╛рдЧреВ рдХрд░рд╛::рдЕрдирдкрд┐рди рдХрд░рд╛;
    • "ArcтА╣[T]тА║" рдЖрдгрд┐ "RcтА╣[T]тА║" рдЖрддрд╛ FromIteratorтА╣TтА║ рд▓рд╛рдЧреВ рдХрд░рд╛;
    • iter::{StepBy, Peekable, Take} рдЖрддрд╛ DoubleEndedIterator рд▓рд╛рдЧреВ рдХрд░рд╛.
    • ascii::EscapeDefault рдХреНрд▓реЛрди рдЖрдгрд┐ рдбрд┐рд╕реНрдкреНрд▓реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ.
  • рдПрдкреАрдЖрдпрдЪрд╛ рдПрдХ рдирд╡реАрди рднрд╛рдЧ рд╕реНрдерд┐рд░ рд╢реНрд░реЗрдгреАрдордзреНрдпреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ
    • тА╣*const TтА║::cast, тА╣*mut TтА║::cast,
    • рдХрд╛рд▓рд╛рд╡рдзреА::as_secs_f{32|64},
    • рдХрд╛рд▓рд╛рд╡рдзреА::div_duration_f{32|64},
    • рдХрд╛рд▓рд╛рд╡рдзреА::div_f{32|64},
    • рдХрд╛рд▓рд╛рд╡рдзреА::from_secs_f{32|64},
    • рдХрд╛рд▓рд╛рд╡рдзреА::mul_f{32|64},
    • рдЙрд░реНрд╡рд░рд┐рдд рд╕рд╣ рд╡рд┐рднрд╛рдЧрдгреА рдСрдкрд░реЗрд╢рдиреНрд╕
      div_euclid рдЖрдгрд┐ rem_euclid рд╕рд░реНрд╡ рдкреВрд░реНрдгрд╛рдВрдХ рдЖрджрд┐рдорд╛рдВрд╕рд╛рдареА;

  • рдХрд╛рд░реНрдЧреЛ рдкреЕрдХреЗрдЬ рдореЕрдиреЗрдЬрд░рдордзреНрдпреЗ рднрд┐рдиреНрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА тАЬ--featuresтАЭ рдкрд░реНрдпрд╛рдп рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ;
  • рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдХ рддреГрддреАрдпрд╛рдВрд╢ рдкреНрд░рджрд╛рди рдХрд░рддреЛ рдкрд╛рддрд│реА aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-gnu, x7_7-uwp-windows-msvc рд▓рдХреНрд╖реНрдп, armunux32 рд▓рдХреНрд╖реНрдпрд┐рдд рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╕рд╛рдареА рд╕рдорд░реНрдерди -gnueabi, armvXNUMX-unknown-linux-musleabi, hexagon-unknown-linux-musl рдЖрдгрд┐ riscvXNUMXi-unknown-none-elf. рддрд┐рд╕рд▒реНрдпрд╛ рд╕реНрддрд░рд╛рдордзреНрдпреЗ рдореВрд▓рднреВрдд рд╕рдорд░реНрдерди рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рдЕрдзрд┐рдХреГрдд рдмрд┐рд▓реНрдбрдЪреЗ рдкреНрд░рдХрд╛рд╢рди рди рдХрд░рддрд╛.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛