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

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

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

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

  • рдХрд╛рд░реНрдЧреЛ рдкреЕрдХреЗрдЬ рдореЕрдиреЗрдЬрд░рдиреЗ рдкрд░реНрдпрд╛рдпреА рдкреЕрдХреЗрдЬ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рдзрдиреЗ рдЬреЛрдбрд▓реА рдЖрд╣реЗрдд рдЬреА crates.io рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдиреЛрдВрджрдгреАрд╕рд╣ рдПрдХрддреНрд░ рд░рд╛рд╣реВ рд╢рдХрддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреНрд░реЛрдкреНрд░рд╛рдпрдЯрд░реА рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреЗ рдбреЗрд╡реНрд╣рд▓рдкрд░ рдЖрддрд╛ рддреНрдпрд╛рдВрдЪреА рд╕реНрд╡рддрдГрдЪреА рдЦрд╛рдЬрдЧреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛рдд, рдЬреА Cargo.toml рдордзреНрдпреЗ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡рд╛рдВрдЪреА рд╕реВрдЪреА рдХрд░рддрд╛рдирд╛ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЙрддреНрдкрд╛рджрдирд╛рдВрд╕рд╛рдареА crates.io рдкреНрд░рдорд╛рдгреЗрдЪ рдЖрд╡реГрддреНрддреА рдореЙрдбреЗрд▓ рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддрд╛рдд, рддрд╕реЗрдЪ рджреЛрдиреНрд╣реА рдХреНрд░реЗрдЯрд╕рд╛рдареА рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реВ рд╢рдХрддрд╛рдд. io рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдиреЛрдВрджрдгреАрд╕рд╛рдареА.

    .cargo/config рдордзреНрдпреЗ рдмрд╛рд╣реНрдп рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА ($HOME рдордзреНрдпреЗ рдХрд┐рдВрд╡рд╛ рдкреЕрдХреЗрдЬ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рд╕реНрдерд┐рдд)
    рдкреНрд░рджрд╛рди рдХреЗрд▓реЗ рд╡рд┐рднрд╛рдЧ "[рдиреЛрдВрджрдгреА]", рдЖрдгрд┐ рдмрд╛рд╣реНрдп рдиреЛрдВрджрдгреА рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА, "рд░рдЬрд┐рд╕реНрдЯреНрд░реА" рдкрд░реНрдпрд╛рдп Cargo.toml рдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡рд╛рдЪреНрдпрд╛ рд╡рд░реНрдгрдирд╛рдордзреНрдпреЗ рджрд┐рд╕реВрди рдЖрд▓рд╛ рдЖрд╣реЗ. рдЕрддрд┐рд░рд┐рдХреНрдд рд░реЗрдЬрд┐рд╕реНрдЯреНрд░реАрд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдлрдХреНрдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреЛрдХрди ~/.cargo/credentials рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдареЗрд╡рд╛ рдЖрдгрд┐ рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛.
    "рдХрд╛рд░реНрдЧреЛ рд▓реЙрдЧрд┐рди --registry=my-registry" рдЖрдгрд┐ рдкреЕрдХреЗрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА -
    "cargo publish -registry=my-registry";

  • тАЬ?тАЭ рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ. рдЪрд╛рдЪрдгреНрдпрд╛рдВрдордзреНрдпреЗ рдбреЙрдХреНрдЯрд░реНрд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рддреАрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдЪрд╛рдЪрдгреНрдпрд╛ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рдкреВрд░реНрд╡реА рдСрдкрд░реЗрдЯрд░
    "?" рдлрдХреНрдд тАЬfn main()тАЭ рдлрдВрдХреНрд╢рдирдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдд рдХрд┐рдВрд╡рд╛ тАЬ#[test]тАЭ рдлрдВрдХреНрд╢рдиреНрд╕рдордзреНрдпреЗ рдЪрд╛рдЪрдгреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрджрд░рдореНрдпрд╛рди рддреНрд░реБрдЯреА рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ;

  • рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореЕрдХреНрд░реЛ рд╡рд╛рдкрд░реВрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдВрдордзреНрдпреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЯреЛрдХрдиреНрд╕рдЪреЗ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╕рдВрдЪ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ (тАЬ#[attr($tokens)]тАЭ, тАЬ#[attr[$tokens]] рдЖрдгрд┐ #[attr{$tokens}]тАЭ). рдкреВрд░реНрд╡реА, рдШрдЯрдХ рдХреЗрд╡рд│ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд┐рдЯрд░рд▓реНрд╕ рд╡рд╛рдкрд░реВрди рдЯреНрд░реА/рд░рд┐рдХрд░реНрд╕рд┐рд╡реНрд╣ рд╕реНрд╡рд░реВрдкрд╛рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде тАЬ#[foo(bar, baz(quux, foo = тАЬbarтАЭ))]тАЭ, рдкрд░рдВрддреБ рдЖрддрд╛ рдЧрдгрдиреЗ рд╡рд╛рдкрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ (' #[рд╢реНрд░реЗрдгреА(0. .10)]') рдЖрдгрд┐ рдмрд╛рдВрдзрдХрд╛рдореЗ рдЬрд╕реЗ рдХреА тАЬ#[рдмрд╛рдЙрдВрдб(T: рдорд╛рдпрдЯреНрд░реЗрдЯ)]тАЭ;
  • рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ (рд╡реИрд╢рд┐рд╖реНрдЯреНрдп) рдкрд╛рд╕реВрди рдкреНрд░рдпрддреНрди рдХрд░рд╛ ╨╕ рдкреНрд░рдпрддреНрди рдХрд░рд╛, рдПрд░рд░ рд╣рд╛рддрд╛рд│рдгреАрд╕рд╣ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдгрд╛рдВрдирд╛ рдЕрдиреБрдорддреА рджреЗрддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, from_be_bytes рд╕рд╛рд░рдЦреНрдпрд╛ рдкрджреНрдзрддреА рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╣ ре▓рд░реЗрдЪрд╛ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░ рдХрд░рддрд╛рдд, рдкрд░рдВрддреБ рдбреЗрдЯрд╛ рдЕрдиреЗрдХрджрд╛ рд╕реНрд▓рд╛рдЗрд╕ рдкреНрд░рдХрд╛рд░рд╛рдд рдпреЗрддреЛ рдЖрдгрд┐ ре▓рд░реЗ рдЖрдгрд┐ рд╕реНрд▓рд╛рдЗрд╕рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░ рдХрд░рдгреЗ рдореЕрдиреНрдпреБрдЕрд▓реА рдХрд░рдгреЗ рд╕рдорд╕реНрдпрд╛рдкреНрд░рдзрд╛рди рдЖрд╣реЗ. рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪреНрдпрд╛ рдорджрддреАрдиреЗ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдкрд░реЗрд╢рди рдлреНрд▓рд╛рдпрд╡рд░ .try_into() рд╡рд░ рдХреЙрд▓рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, тАЬlet num = u32::from_be_bytes(slice.try_into()?)тАЭ. рдиреЗрд╣рдореА рдпрд╢рд╕реНрд╡реА рд╣реЛрдгрд╛рд▒реНрдпрд╛ рд░реВрдкрд╛рдВрддрд░рдгрд╛рдВрд╕рд╛рдареА (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, u8 рддреЗ u32 рдкреНрд░рдХрд╛рд░рд╛рдкрд░реНрдпрдВрдд), рддреНрд░реБрдЯреА рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ рдЕрдЪреВрдХ, рдкрд╛рд░рджрд░реНрд╢рдХ рд╡рд╛рдкрд░рд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ
    "From" рдЪреНрдпрд╛ рд╕рд░реНрд╡ рд╡рд┐рджреНрдпрдорд╛рди рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА TryFrom;

  • рдХрд╛рд░реНрдп рдмрд╣рд┐рд╖реНрдХреГрдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ CommandExt::before_exec, рдЬреНрдпрд╛рдиреЗ exec рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА рд╣рдБрдбрд▓рд░рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджрд┐рд▓реА, рдЬреА рдлреЛрд░реНрдХ() рдХреЙрд▓ рдирдВрддрд░ рдлреЛрд░реНрдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЪрд╛рдЗрд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдд рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реА рдЧреЗрд▓реА. рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рдореВрд│ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреА рдХрд╛рд╣реА рд╕рдВрд╕рд╛рдзрдиреЗ, рдЬрд╕реЗ рдХреА рдлрд╛рдЗрд▓ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдЖрдгрд┐ рдореЕрдк рдХреЗрд▓реЗрд▓реЗ рдореЗрдорд░реА рдХреНрд╖реЗрддреНрд░, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдЬреНрдпрд╛рдореБрд│реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд░реНрддрди рдЖрдгрд┐ рд▓рд╛рдпрдмреНрд░рд░реАрдВрдЪреЗ рдЪреБрдХреАрдЪреЗ рдСрдкрд░реЗрд╢рди рд╣реЛрдК рд╢рдХрддреЗ.
    before_exec рдРрд╡рдЬреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ CommandExt::pre_exec.

  • 8 рддреЗ 64 рдмрд┐рдЯреНрд╕ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, AtomicU8), рддрд╕реЗрдЪ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реЗ рдкреНрд░рдХрд╛рд░ рд╢реВрдиреНрдп рд╢реВрдиреНрдп[8|16|32|64|128].
  • API рдЪрд╛ рдирд╡реАрди рднрд╛рдЧ рдХреЛрдгрддреНрдпрд╛рд╣реА::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub тАЛтАЛрдпрд╛рд╕рд╣ рд╕реНрдерд┐рд░ рд╢реНрд░реЗрдгреАрдордзреНрдпреЗ рд╣рд▓рд╡рд┐рд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ. ] рдЖрдгрд┐ SystemTime рдкрджреНрдзрддреА рд╕реНрдерд┐рд░ рдХреЗрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд ::checked_[add|sub]. iter::from_fn рдЖрдгрд┐ iter::successors рдлрдВрдХреНрд╢рдиреНрд╕ рд╕реНрдерд┐рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд;
  • рд╕рд░реНрд╡ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╛рдареА, checked_pow, saturating_pow, wrapping_pow рдЖрдгрд┐ overflowing_pow рдкрджреНрдзрддреА рд▓рд╛рдЧреВ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд;
  • "-C linker-plugin-lto" рдмрд┐рд▓реНрдб рдкрд░реНрдпрд╛рдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВрди рд▓рд┐рдВрдХрд┐рдВрдЧ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд▓реА.

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

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