рд░рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ 1.73 рд░рд┐рд▓реАрдЬ

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

рд░рд╕реНрдЯрдХреЛ рдореЗрдореЛрд░реА рд╣реНрдпрд╛рдиреНрдбрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рд╣рд░реВрд▓реЗ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд▓рд╛рдИ рдкреЛрдЗрдиреНрдЯрд░реНрд╕ рд╣реЗрд░рдлреЗрд░ рдЧрд░реНрджрд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВрдмрд╛рдЯ рдмрдЪрд╛рдЙрдБрдЫ рд░ рдирд┐рдореНрди-рд╕реНрддрд░рдХреЛ рдореЗрдореЛрд░реА рд╣реНрдпрд╛рдиреНрдбрд▓рд┐рдЩрдХрд╛ рдХрд╛рд░рдг рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдмрд╛рдЯ рдЬреЛрдЧрд╛рдЙрдБрдЫ, рдЬрд╕реНрддреИ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░рд▓рд╛рдИ рдЦрд╛рд▓реА рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐ рдкрд╣реБрдБрдЪ рдЧрд░реНрдиреЗ, рдирд▓ рдкреЛрдЗрдиреНрдЯрд╣рд░реВ, рдмрдлрд░ рдУрднрд░рд░рдиреНрд╕, рдЗрддреНрдпрд╛рджрд┐ред рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ рд╡рд┐рддрд░рдг рдЧрд░реНрди, рдирд┐рд░реНрдорд╛рдгрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрди рд░ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди, рдкрд░рд┐рдпреЛрдЬрдирд╛рд▓реЗ рдХрд╛рд░реНрдЧреЛ рдкреНрдпрд╛рдХреЗрдЬ рдкреНрд░рдмрдиреНрдзрдХ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджрдЫред crates.io рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерд┐рдд рдЫред

рдореЗрдореЛрд░реА рд╕реБрд░рдХреНрд╖рд╛ рд╕рдиреНрджрд░реНрдн рдЬрд╛рдБрдЪ, рд╡рд╕реНрддреБ рд╕реНрд╡рд╛рдорд┐рддреНрд╡рдХреЛ рдЯреНрд░реНрдпрд╛рдХ рд░рд╛рдЦреНрдиреЗ, рд╡рд╕реНрддреБ рдЬреАрд╡рдирдХрд╛рд▓ (рд╕реНрдХреЛрдкрд╣рд░реВ) рдХреЛ рдЯреНрд░реНрдпрд╛рдХ рд░рд╛рдЦреНрдиреЗ, рд░ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдХреНрд░рдордорд╛ рдореЗрдореЛрд░реА рдкрд╣реБрдБрдЪрдХреЛ рд╢реБрджреНрдзрддрд╛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реЗрд░ рдХрдореНрдкрд╛рдЗрд▓ рд╕рдордпрдорд╛ рд░рд╕реНрдЯрдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдиреНрдЫред Rust рд▓реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдУрднрд░рдлреНрд▓реЛрд╣рд░реВ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ рдкрдирд┐ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдЪрд░ рдорд╛рдирд╣рд░реВрдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░рд╛рд░рдореНрднрд┐рдХрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдЫ, рддреНрд░реБрдЯрд┐рд╣рд░реВрд▓рд╛рдИ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрджрдЫ, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдиреНрджрд░реНрднрд╣рд░реВ рд░ рдЪрд░рд╣рд░реВрдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫ, рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐рд╣рд░реВрд▓рд╛рдИ рдХрдо рдЧрд░реНрди рдмрд▓рд┐рдпреЛ рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдЩ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред

рдореБрдЦреНрдп рдЖрд╡рд┐рд╖реНрдХрд╛рд░рд╣рд░реВ:

  • рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреНрд░реНрдпрд╛рд╕ рд╣реНрдпрд╛рдиреНрдбрд▓рд░ (рдЖрддрдВрдХ) рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдЧрд░рд┐рдПрдХрд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рдврд╛рдБрдЪрд╛ рдкреБрди: рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЫред "рдЖрддрдВрдХ!" рдореНрдпрд╛рдХреНрд░реЛрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдкрд╛рда рдЕрдм рдЙрджреНрдзрд░рдг рдЪрд┐рдиреНрд╣рд╣рд░реВ рдмрд┐рдирд╛ рдЫреБрдЯреНрдЯреИ рд▓рд╛рдЗрдирдорд╛ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫ, рд╕рдиреНрджреЗрд╢рд▓рд╛рдИ рдкрдвреНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрди рд░ рдиреЗрд╕реНрдЯреЗрдб рдЙрджреНрдзрд░рдгрд╣рд░реВ рдЙрдкрд╕реНрдерд┐рдд рд╣реБрдБрджрд╛ рд╡рд╛ рдзреЗрд░реИ рд░реЗрдЦрд╛рд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реБрдБрджрд╛ рднреНрд░рдо рд╣рдЯрд╛рдЙрдБрдЫред fn main() { let file = "ferris.txt"; рдЖрддрдВрдХ!("рдУрд╣реЛ! {рдлрд╛рдЗрд▓:?} рдлреЗрд▓рд╛ рдкрд░реЗрди!"); } рддреНрдпрд╣рд╛рдБ рдереНрд░реЗрдб 'рдореЗрди' тАЛтАЛрдорд╛ рдбрд░рд╛рдПрдХреЛ рдерд┐рдпреЛ 'рдУрд╣реЛ! "ferris.txt" рдлреЗрд▓рд╛ рдкрд░реЗрди!', src/main.rs:3:5 рдереНрд░реЗрдб 'main' src/main.rs:3:5: рдУрд╣реЛ! "ferris.txt" рдлреЗрд▓рд╛ рдкрд░реЗрди!

    "assert_eq" рд░ "assert_ne" рдореНрдпрд╛рдХреНрд░реЛрд╣рд░реВ рдЯреНрд░рд┐рдЧрд░ рд╣реБрдБрджрд╛ рджреЗрдЦрд╛рдЗрдПрдХрд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдкрдирд┐ рдкреБрди: рдХрд╛рд░реНрдп рдЧрд░рд┐рдПрдХреЛ рдЫред fn main() { assert_eq!("ЁЯжА", "ЁЯРЯ", "рдлреЗрд░рд┐рд╕ рдорд╛рдЫрд╛ рд╣реЛрдЗрди"); } рддреНрдпрд╣рд╛рдБ 'рдореБрдЦреНрдп' рдереНрд░реЗрдб рдерд┐рдпреЛ 'рджрд╛рд╡рд╛ рдЕрд╕рдлрд▓ рднрдпреЛ:` (рдмрд╛рдпрд╛рдБ == рджрд╛рдпрд╛рдБ)` рдмрд╛рдпрд╛рдБ: `"ЁЯжА"`, рджрд╛рдпрд╛рдБ: `"ЁЯРЯ"`: рдлреЗрд░реА рдорд╛рдЫрд╛ рд╣реЛрдЗрди', src/main.rs: 2 :5 рдереНрд░реЗрдб 'main' src/main.rs:2:5 рдорд╛ рдЖрддреНрддрд┐рдпреЛ: assertion `left == right` рдЕрд╕рдлрд▓ рднрдпреЛ: рдлреЗрд░рд┐рд╕ рдорд╛рдЫрд╛ рдмрд╛рдпрд╛рдБ рд╣реЛрдЗрди: "ЁЯжА" рджрд╛рдпрд╛рдБ: "ЁЯРЯ"

  • RFC 3184 рдЕрдиреБрд╕рд╛рд░, рдереНрд░реЗрдб-рд▓реЛрдХрд▓ (thread_local) LocalKey рднрдгреНрдбрд╛рд░рдг рдХреБрдЮреНрдЬреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдкрдорд╛ рд╣реЗрд░рдлреЗрд░ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рдердкрд┐рдПрдХреЛ рдЫред > рд░ LocalKey > get(), set(), take() рд░ replace() рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, "with(|inner| ...)" рдХреНрд▓реЛрдЬрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛, рдЬрд╕рд▓реЗ рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдердк рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдХреЛрдб рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рд▓рд╛рдИ рд╣рдЯрд╛рдЙрдБрдЫред рдореНрдпрд╛рдХреНрд░реЛ "thread_local!" рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рдирдпрд╛рдБ рдереНрд░реЗрдбрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд╣рд░реВред thread_local! { рд╕реНрдерд┐рд░ рдЪреАрдЬрд╣рд░реВ: рд╕реЗрд▓ > = рд╕реЗрд▓::рдирдпрд╛рдБ (Vec::new()); } fn f() { // was THINGS.with(|i| i.set(vec![32, 1, 2])); // рдмрдиреНрдпреЛ THINGS.set(vec![3, 1, 2]); // ... // рд▓рд╛рдИ v = THINGS.with(|i| i.take()); // рдмрдиреНрдпреЛ let v: Vec = THINGS.take(); }
  • рдПрдкреАрдЖрдИ рдХреЛ рдПрдХ рдирдпрд╛рдБ рднрд╛рдЧ рд╕реНрдерд┐рд░ рдХреЛ рд╢реНрд░реЗрдгреА рдорд╛ рд╕рд╛рд░рд┐рдпреЛ, рд╡рд┐рдзрд┐рд╣рд░реБ рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реБ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╣рд┐рдд рд╕реНрдерд┐рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ:
    • рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирдЧрд░рд┐рдПрдХреЛ {integer}::div_ceil
    • рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирдЧрд░рд┐рдПрдХреЛ {integer}::next_multiple_of
    • рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирдЧрд░рд┐рдПрдХреЛ {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • рд╕реНрдерд╛рдиреАрдп рдХреБрдЮреНрдЬреА :: >::рдкрд╛рдЙрдиреБрд╣реЛрд╕реН
    • рд╕реНрдерд╛рдиреАрдп рдХреБрдЮреНрдЬреА :: >::рд╕реЗрдЯ
    • рд╕реНрдерд╛рдиреАрдп рдХреБрдЮреНрдЬреА :: >:: рд▓рд┐рдиреБрд╣реЛрд╕реН
    • рд╕реНрдерд╛рдиреАрдп рдХреБрдЮреНрдЬреА :: >:: рдмрджрд▓реНрдиреБрд╣реЛрд╕реН
    • рд╕реНрдерд╛рдиреАрдп рдХреБрдЮреНрдЬреА :: >:: with_borrow
    • рд╕реНрдерд╛рдиреАрдп рдХреБрдЮреНрдЬреА :: >::with_borrow_mut
    • рд╕реНрдерд╛рдиреАрдп рдХреБрдЮреНрдЬреА :: >::рд╕реЗрдЯ
    • рд╕реНрдерд╛рдиреАрдп рдХреБрдЮреНрдЬреА :: >:: рд▓рд┐рдиреБрд╣реЛрд╕реН
    • рд╕реНрдерд╛рдиреАрдп рдХреБрдЮреНрдЬреА :: >:: рдмрджрд▓реНрдиреБрд╣реЛрд╕реН
  • "const" рд╡рд┐рд╢реЗрд╖рддрд╛, рдЬрд╕рд▓реЗ рд╕реНрдерд┐рд░рддрд╛рдХреЛ рд╕рдЯреНрдЯрд╛ рдХреБрдиреИ рдкрдирд┐ рд╕рдиреНрджрд░реНрднрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрджрдЫ, рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ:
    • rc::рдХрдордЬреЛрд░::рдирдпрд╛рдБ
    • рд╕рд┐рдВрдХ::рдХрдордЬреЛрд░::рдирдпрд╛рдБ
    • NonNull::as_ref
  • рдХрдореНрдкрд╛рдЗрд▓рд░рд▓реЗ GCC рд░ Clang рдЬрд╕реНрддреИ ".comment" рдЦрдгреНрдбрдорд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд░реЗрдХрд░реНрдбрд┐рдЩ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред
  • рд╕рдорд░реНрдердирдХреЛ рддреЗрд╕реНрд░реЛ рд╕реНрддрд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдорд╣рд░реВ aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl рд░ x86_64-unknown-linux рдХрд╛ рд▓рд╛рдЧрд┐ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЫред - рдУрд╣реЛред рддреЗрд╕реНрд░реЛ рддрд╣рдорд╛ рдЖрдзрд╛рд░рднреВрдд рд╕рдорд░реНрдерди рд╕рдорд╛рд╡реЗрд╢ рдЫ, рддрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдмрд┐рдирд╛, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд┐рд░реНрдорд╛рдгрд╣рд░реВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреЗ, рд╡рд╛ рдХреЛрдб рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдХрд┐ рднрдиреЗрд░ рдЬрд╛рдБрдЪ рдирдЧрд░реАред
  • рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд░реНрдо wasm32-wasi-preview1-threads рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдХреЛ рджреЛрд╕реНрд░реЛ рд╕реНрддрд░ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЫред рд╕рдорд░реНрдерди рдХреЛ рджреЛрд╕реНрд░реЛ рд╕реНрддрд░ рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди