ืฉื—ืจื•ืจ ืฉืคืช ืชื›ื ื•ืช Rust 1.66

ืคืจืกื•ื ืฉืคืช ื”ืชื›ื ื•ืช ืœืžื˜ืจื•ืช ื›ืœืœื™ื•ืช Rust 1.66, ืฉื ื•ืกื“ื” ืขืœ ื™ื“ื™ ืคืจื•ื™ืงื˜ ืžื•ื–ื™ืœื”, ืืš ืคื•ืชื—ื” ื›ืขืช ื‘ื—ืกื•ืช ื”ืขืžื•ืชื” ื”ืขืฆืžืื™ืช Rust Foundation. ื”ืฉืคื” ืžืชืžืงื“ืช ื‘ื‘ื˜ื™ื—ื•ืช ื–ื™ื›ืจื•ืŸ ื•ืžืกืคืงืช ืืช ื”ืืžืฆืขื™ื ืœื”ืฉื’ืช ืžืงื‘ื™ืœื™ื•ืช ืขื‘ื•ื“ื” ื’ื‘ื•ื”ื” ืชื•ืš ื”ื™ืžื ืขื•ืช ืžืฉื™ืžื•ืฉ ื‘ืืกืคืŸ ืืฉืคื” ื•ื–ืžืŸ ืจื™ืฆื” (ื–ืžืŸ ื”ืจื™ืฆื” ืžืฆื˜ืžืฆื ืœืืชื—ื•ืœ ื•ืชื—ื–ื•ืงื” ื‘ืกื™ืกื™ื™ื ืฉืœ ื”ืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช).

ืฉื™ื˜ื•ืช ื”ื˜ื™ืคื•ืœ ื‘ื–ื™ื›ืจื•ืŸ ืฉืœ Rust ื—ื•ืกื›ื•ืช ืžื”ืžืคืชื— ืฉื’ื™ืื•ืช ื‘ืขืช ืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ืžืฆื‘ื™ืขื™ื ื•ืžื’ื™ื ื•ืช ืžืคื ื™ ื‘ืขื™ื•ืช ื”ืžืชืขื•ืจืจื•ืช ืขืงื‘ ื˜ื™ืคื•ืœ ื‘ื–ื™ื›ืจื•ืŸ ื‘ืจืžื” ื ืžื•ื›ื”, ื›ื’ื•ืŸ ื’ื™ืฉื” ืœืื–ื•ืจ ื–ื™ื›ืจื•ืŸ ืœืื—ืจ ืฉื—ืจื•ืจื•, ื–ื™ื”ื•ื™ ืžืฆื‘ื™ืขื™ null, ื—ืจื™ื’ื•ืช ืžืื’ืจ ื•ื›ื•'. ื›ื“ื™ ืœื”ืคื™ืฅ ืกืคืจื™ื•ืช, ืœืกืคืง ื‘ื ื™ื™ื” ื•ืœื ื”ืœ ืชืœื•ืช, ื”ืคืจื•ื™ืงื˜ ืžืคืชื— ืืช ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช Cargo. ืžืื’ืจ crates.io ื ืชืžืš ืœืื™ืจื•ื— ืกืคืจื™ื•ืช.

ื‘ื˜ื™ื—ื•ืช ื–ื™ื›ืจื•ืŸ ืžืกื•ืคืงืช ื‘-Rust ื‘ื–ืžืŸ ื”ืงื•ืžืคื™ืœืฆื™ื” ื‘ืืžืฆืขื•ืช ื‘ื“ื™ืงืช ื”ืคื ื™ื•ืช, ืžืขืงื‘ ืื—ืจ ื‘ืขืœื•ืช ืขืœ ืื•ื‘ื™ื™ืงื˜, ืžืขืงื‘ ืื—ืจ ืžืฉืš ื—ื™ื™ื ืฉืœ ืื•ื‘ื™ื™ืงื˜ (ืกืงื•ืคื™ื), ื•ื”ืขืจื›ืช ื ื›ื•ื ื•ืช ื”ื’ื™ืฉื” ืœื–ื™ื›ืจื•ืŸ ื‘ืžื”ืœืš ื‘ื™ืฆื•ืข ืงื•ื“. Rust ืžืกืคืงืช ื’ื ื”ื’ื ื” ืžืคื ื™ ื”ืฆืคืช ืžืกืคืจื™ื ืฉืœืžื™ื, ื“ื•ืจืฉืช ืืชื—ื•ืœ ื—ื•ื‘ื” ืฉืœ ืขืจื›ื™ ืžืฉืชื ื™ื ืœืคื ื™ ื”ืฉื™ืžื•ืฉ, ืžื˜ืคืœืช ื‘ืฉื’ื™ืื•ืช ื˜ื•ื‘ ื™ื•ืชืจ ื‘ืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช, ืžื™ื™ืฉืžืช ืืช ื”ืจืขื™ื•ืŸ ืฉืœ ื”ืคื ื™ื•ืช ื•ืžืฉืชื ื™ื ื‘ืœืชื™ ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืžืฆื™ืขื” ื”ืงืœื“ื” ืกื˜ื˜ื™ืช ื—ื–ืงื” ื›ื“ื™ ืœืžื–ืขืจ ืฉื’ื™ืื•ืช ืœื•ื’ื™ื•ืช.

ื—ื™ื“ื•ืฉื™ื ืขื™ืงืจื™ื™ื:

  • ื‘ืกืคื™ืจื•ืช ืขื ื™ื™ืฆื•ื’ื™ื ืฉืœืžื™ื (ื”ืชื›ื•ื ื” "#[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 ื›ื“ื™ ืœื ื˜ืจืœ ืืช ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืœื•ืœืื•ืช ื”ืžื”ื“ืจ ื‘ืขืช ื‘ื™ืฆื•ืข ื‘ื“ื™ืงืช ื‘ื™ืฆื•ืขื™ ืงื•ื“ ืื• ื‘ืขืช ื‘ื—ื™ื ืช ืงื•ื“ ืžื›ื•ื ื” ืฉื ื•ืฆืจ (ื›ื“ื™ ืฉื”ืžื”ื“ืจ ืœื ื™ื—ืฉื™ื‘ ืืช ื”ืงื•ื“ ื‘ืœืชื™ ืฉืžื™ืฉ ื•ืœื”ืกื™ืจ ื–ื”). ืœื“ื•ื’ืžื”, ื‘ื“ื•ื’ืžื” ืœืžื˜ื”, ืฆื™ื•ืŸ black_box(v.as_ptr()) ืžื•ื ืข ืžื”ืžื”ื“ืจ ืœื”ื ื™ื— ืฉื”ื•ื•ืงื˜ื•ืจ v ืื™ื ื• ื‘ืฉื™ืžื•ืฉ. ื”ืฉืชืžืฉ ื‘-std::hint::black_box; fn push_cap(v: &mut Vec) { ืขื‘ื•ืจ i ื‘-0..4 { v.push(i); black_box(v.as_ptr()); } }
  • ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช "cargo" ืžืฆื™ืข ืืช ื”ืคืงื•ื“ื” "remove", ื”ืžืืคืฉืจืช ืœื”ืกื™ืจ ืชืœื•ืช ืžื”ืžื ื™ืคืกื˜ ืฉืœ 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}
    • ื”ื•ืกืฃ ื™ื™ืฉื•ืžื™ AsFd ืขื‘ื•ืจ ืกื•ื’ื™ ื ืขื™ืœืช stdio ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-WASI.
    • impl TryFrom > ืขื‘ื•ืจ ืชื™ื‘ื”<[T; N]>
    • core::hint::black_box
    • ืžืฉืš::try_from_secs_{f32,f64}
    • Option:: unzip
    • std::os::fd
  • ื”ืฉื™ืžื•ืฉ ื‘ื˜ื•ื•ื—ื™ื "..X" ื•- "..=X" ืžื•ืชืจ ื‘ืชื‘ื ื™ื•ืช.
  • ื‘ืขืช ื”ืจื›ื‘ืช ื”-frontend ืฉืœ ืžื”ื“ืจ rustc ื•ื”-backend ืฉืœ LLVM, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืžืฆื‘ื™ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” LTO (Link Time Optimization) ื•-BOLT (Binary Optimization and Layout Tool), ื”ืžืืคืฉืจื™ื ื”ื’ื“ืœืช ื‘ื™ืฆื•ืขื™ ื”ืงื•ื“ ื”ืžืชืงื‘ืœ ื•ื”ืคื—ืชืช ืฆืจื™ื›ืช ื”ื–ื™ื›ืจื•ืŸ.
  • ืจืžืช ื”ืชืžื™ื›ื” ื”ืฉืœื™ืฉื™ืช ื™ื•ืฉืžื” ืขื‘ื•ืจ ื”ืคืœื˜ืคื•ืจืžื•ืช armv5te-none-eabi ื•-thumbv5te-none-eabi. ื”ืจืžื” ื”ืฉืœื™ืฉื™ืช ื›ื•ืœืœืช ืชืžื™ื›ื” ื‘ืกื™ืกื™ืช, ืืš ืœืœื ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช, ืคืจืกื•ื ื‘ื•ื ื™ื ืจืฉืžื™ื™ื ืื• ื‘ื“ื™ืงื” ืื ื ื™ืชืŸ ืœื‘ื ื•ืช ืืช ื”ืงื•ื“.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืงื™ืฉื•ืจ ืขื ืกืคืจื™ื•ืช ืื•ื ื™ื‘ืจืกืœื™ื•ืช ืฉืœ macOS.

ื‘ื ื•ืกืฃ, ืื ื• ื™ื›ื•ืœื™ื ืœืฆื™ื™ืŸ ืืช ื”ื›ืœืœืช ื”ืงืฆื” ื”ืงื“ืžื™ ืฉืœ ืžื”ื“ืจ ืฉืคืช Rust (gccrs) ื‘ื‘ืกื™ืก ื”ืงื•ื“ ืฉืœ GCC. ื”-frontend ื›ืœื•ืœ ื‘ืกื ื™ืฃ GCC 13, ืืฉืจ ื™ืฉื•ื—ืจืจ ื‘ืžืื™ 2023. ื”ื—ืœ ืž-GCC 13, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ GCC ื”ืžืงื•ืจื™ื™ื ื›ื“ื™ ืœื”ื“ืจ ืชื•ื›ื ื™ื•ืช ื‘ืฉืคืช Rust ืœืœื ืฆื•ืจืš ื‘ื”ืชืงื ืช ืžื”ื“ืจ rustc, ืฉื ื‘ื ื” ื‘ืืžืฆืขื•ืช ืคื™ืชื•ื—ื™ LLVM. ื”ื”ื˜ืžืขื” ืฉืœ GCC 13 ืฉืœ Rust ืชื”ื™ื” ื’ืจืกืช ื‘ื˜ื, ืœื ืžื•ืคืขืœืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”