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

Mozilla рдкреНрд░рдХрд▓реНрдкрд╛рджреНрд╡рд╛рд░реЗ рд╕реНрдерд╛рдкрд┐рдд, рдкрд░рдВрддреБ рдЖрддрд╛ рд╕реНрд╡рддрдВрддреНрд░ рдирд╛-рдирдлрд╛ рд╕рдВрд╕реНрдерд╛ Rust Foundation рдЪреНрдпрд╛ рд╕рдВрд░рдХреНрд╖рдгрд╛рдЦрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓реА Rust 1.66 рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реА рдЖрд╣реЗ. рднрд╛рд╖рд╛ рдореЗрдорд░реА рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рдЖрдгрд┐ рдХрдЪрд░рд╛ рдЧреЛрд│рд╛ рдХрд░рдгрд╛рд░реЗ рдЖрдгрд┐ рд░рдирдЯрд╛рдЗрдордЪрд╛ рд╡рд╛рдкрд░ рдЯрд╛рд│реВрди рдЙрдЪреНрдЪ рдЬреЙрдм рд╕рдорд╛рдВрддрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рдЪреЗ рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ (рд░рдирдЯрд╛рдЗрдо рдореВрд▓рднреВрдд рдкреНрд░рд╛рд░рдВрдн рдЖрдгрд┐ рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░рд░реАрдЪреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрдореА рдХреЗрд▓рд╛ рдЬрд╛рддреЛ).

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

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

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

  • рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рд╕реНрддреБрддреАрдХрд░рдгрд╛рд╕рд╣ ("#[repr(Int)]" рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЧрдгрд╛рдВрдордзреНрдпреЗ, рдЧрдгрдиреЗрдордзреНрдпреЗ рдлреАрд▓реНрдб рдЕрд╕рд▓реЗ рддрд░реАрд╣реА, рднреЗрджрднрд╛рд╡рд╛рдЪреЗ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд (рдЧрдгрдирд╛рдордзреАрд▓ рднрд┐рдиреНрди рд╕рдВрдЦреНрдпрд╛) рдЕрдиреБрдордд рдЖрд╣реЗрдд. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • рдлрдВрдХреНрд╢рди core::hint::black_box рдЬреЛрдбрд▓реЗ рдЬреЗ рдлрдХреНрдд рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдкрд░рдд рдХрд░рддреЗ. рдХрдВрдкрд╛рдЗрд▓рд░рд▓рд╛ рдЕрд╕реЗ рд╡рд╛рдЯрддреЗ рдХреА рд╣реЗ рдлрдВрдХреНрд╢рди рдХрд╛рд╣реАрддрд░реА рдХрд░рдд рдЖрд╣реЗ, рдмреНрд▓реЕрдХ_рдмреЙрдХреНрд╕ рдлрдВрдХреНрд╢рдирдЪрд╛ рд╡рд╛рдкрд░ рд▓реВрдкрд╕рд╛рдареА рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЕрдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдб рдкрд░рдлреЙрд░реНрдордиреНрд╕ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдХрд░рддрд╛рдирд╛ рдХрд┐рдВрд╡рд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдорд╢реАрди рдХреЛрдб рддрдкрд╛рд╕рддрд╛рдирд╛ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ (рдЬреЗрдгреЗрдХрд░реВрди рдХрдВрдкрд╛рдпрд▓рд░рдиреЗ рдХреЛрдб рд╡рд╛рдкрд░рд▓рд╛ рдирд╛рд╣реА рдЖрдгрд┐ рддреЛ рдХрд╛рдврд▓рд╛ рдирд╛рд╣реА). рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЦрд╛рд▓реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд, black_box(v.as_ptr()) рдХрдВрдкрд╛рдЗрд▓рд░рд▓рд╛ рд╡реНрд╣реЗрдХреНрдЯрд░ v рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдд рдирд╛рд╣реА рдЕрд╕рд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреНрдпрд╛рдкрд╛рд╕реВрди рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ. std::hint::black_box рд╡рд╛рдкрд░рд╛; fn push_cap(v: &mut Vec) { i for 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • "рдХрд╛рд░реНрдЧреЛ" рдкреЕрдХреЗрдЬ рдореЕрдиреЗрдЬрд░ "рд░рд┐рдореВрд╡реНрд╣" рдХрдорд╛рдВрдб рдСрдлрд░ рдХрд░рддреЛ, рдЬреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирд╡рд░реВрди Cargo.toml рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреВрди рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ.
  • API рдЪрд╛ рдПрдХ рдирд╡реАрди рднрд╛рдЧ рд╕реНрдерд┐рд░ рд╢реНрд░реЗрдгреАрдордзреНрдпреЗ рд╣рд▓рд╡рд┐рд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкрджреНрдзрддреА рдЖрдгрд┐ рдЧреБрдгрдзрд░реНрдорд╛рдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реНрдерд┐рд░ рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • WASI рд╡рд╛рдкрд░рддрд╛рдирд╛ stdio рд▓реЙрдХ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╛рдареА AsFd рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЬреЛрдбрд╛.
    • impl TryFrom > рдмреЙрдХреНрд╕<[рдЯреА; N]>
    • core::hint::black_box
    • рдХрд╛рд▓рд╛рд╡рдзреА::try_from_secs_{f32,f64}
    • рдкрд░реНрдпрд╛рдп::рдЕрдирдЭрд┐рдк
    • std::os::fd
  • рдЯреЗрдореНрдкреНрд▓реЗрдЯрдордзреНрдпреЗ "..X" рдЖрдгрд┐ "..=X" рд╢реНрд░реЗрдгреАрдВрдирд╛ рдЕрдиреБрдорддреА рдЖрд╣реЗ.
  • rustc рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдгрд┐ LLVM рдмреЕрдХрдПрдВрдбрдЪрд╛ рдкреБрдврдЪрд╛ рднрд╛рдЧ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рдкрд░рд┐рдгрд╛рдореА рдХреЛрдбрдЪреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рдврд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдореЗрдорд░реА рд╡рд╛рдкрд░ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА LTO (рд▓рд┐рдВрдХ рдЯрд╛рдЗрдо рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди) рдЖрдгрд┐ BOLT (рдмрд╛рдпрдирд░реА рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЖрдгрд┐ рд▓реЗрдЖрдЙрдЯ рдЯреВрд▓) рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдореЛрдб рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд.
  • armv5te-none-eabi рдЖрдгрд┐ thumbv5te-none-eabi рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╕рд╛рдареА рд╕реНрддрд░ XNUMX рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХреЗрд▓реЗ. рддрд┐рд╕рд░рд╛ рд╕реНрддрд░ рдореВрд▓рднреВрдд рд╕рдорд░реНрдерди рд╕реВрдЪрд┐рдд рдХрд░рддреЛ, рдкрд░рдВрддреБ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЪрд╛рдЪрдгреАрд╢рд┐рд╡рд╛рдп, рдЕрдзрд┐рдХреГрдд рдмрд┐рд▓реНрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдХреЛрдб рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рддрдкрд╛рд╕рдгреЗ.
  • macOS рдЬреЗрдиреЗрд░рд┐рдХ рд▓рд╛рдпрдмреНрд░рд░реАрд╢реА рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ.

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА рд░рд╕реНрдЯ рд▓рдБрдЧреНрд╡реЗрдЬ (gccrs) рдЪреНрдпрд╛ рдлреНрд░рдВрдЯ-рдПрдВрдб рдХрдВрдкрд╛рдЗрд▓рд░рдЪреНрдпрд╛ GCC рдХреЛрдбрдмреЗрд╕рдордзреНрдпреЗ рд╕рдорд╛рд╡реЗрд╢ рд▓рдХреНрд╖рд╛рдд рдШреЗрдК рд╢рдХрддреЛ. рдлреНрд░рдВрдЯрдПрдВрдбрдЪрд╛ GCC 13 рд╢рд╛рдЦреЗрдд рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ, рдЬреЛ рдореЗ 2023 рдордзреНрдпреЗ рд░рд┐рд▓реАрдЬ рд╣реЛрдИрд▓. GCC 13 рдкрд╛рд╕реВрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрди, рдорд╛рдирдХ GCC рдЯреВрд▓рдХрд┐рдЯ LLVM рд╡рд┐рдХрд╛рд╕ рд╡рд╛рдкрд░реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ rustc рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрдерд╛рдкрд┐рдд рди рдХрд░рддрд╛ рд░рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓. GCC 13 рдордзреАрд▓ рд░рд╕реНрдЯ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдмреАрдЯрд╛ рд╕реНрдерд┐рддреАрдд рдЕрд╕реЗрд▓, рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕рдХреНрд╖рдо рдирд╛рд╣реА.

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

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