Rust 1.82 เบ›เปˆเบญเบเบญเบญเบเบกเบฒ. เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเปƒเบซเบกเปˆเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Rust. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Rust เปƒเบ™ Volvo

เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ—เบปเปˆเบงเป„เบ› Rust 1.82, เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเป‚เบ„เบ‡เบเบฒเบ™ Mozilla เปเบ•เปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบญเบธเบ›เบฐเบ–เปเบฒเบ‚เบญเบ‡เบญเบปเบ‡เบเบฒเบ™เป€เบญเบเบฐเบฅเบฒเบ”เบ—เบตเปˆเบšเปเปˆเบซเบงเบฑเบ‡เบœเบปเบ™เบเปเบฒเป„เบฅ Rust Foundation, เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒ. เบžเบฒเบชเบฒเบ—เบตเปˆเป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเปเบฅเบฐเบชเบฐเบซเบ™เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเบ„เบงเบฒเบกเบ‚เบฐเบซเบ™เบฒเบ™เบ‚เบญเบ‡เบงเบฝเบเบชเบนเบ‡เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เป€เบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเปเบฅเบฐเป€เบงเบฅเบฒเปเบฅเปˆเบ™ (runtime เบซเบผเบธเบ”เบฅเบปเบ‡เป€เบ›เบฑเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบฅเบฐเบเบฒเบ™เบฎเบฑเบเบชเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™).

เบงเบดเบ—เบตเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡ Rust เบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ”เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเบฒเบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ manipulating pointers เปเบฅเบฐเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒ, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบปเบ”เบ›เปˆเบญเบ, dereferencing null pointers, buffer overruns, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เป€เบžเบทเปˆเบญเปเบˆเบเบขเบฒเบเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”, เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช, เป‚เบ„เบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”เบชเบดเบ™เบ„เป‰เบฒ. เบ„เบฑเบ‡เป€เบเบฑเบš crates.io เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”.

เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เบขเบนเปˆเปƒเบ™ Rust เปƒเบ™เป€เบงเบฅเบฒเบฅเบงเบšเบฅเบงเบกเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡, เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ, เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบญเบฒเบเบธเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ (เบ‚เบญเบšเป€เบ‚เบ”), เปเบฅเบฐเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”. Rust เบเบฑเบ‡เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™ overflows integer, เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบšเบฑเบ‡เบ„เบฑเบšเบ‚เบญเบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ›เบเปˆเบญเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰, เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เบ™เปเบฒเปƒเบŠเป‰เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡ immutable เปเบฅเบฐเบ•เบปเบงเปเบ›เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบžเบดเบกเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเปเบ‚เบ‡เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™.

เบ™เบฐเบงเบฑเบ”เบ•เบฐเบเปเบฒเบ•เบปเป‰เบ™เบ•เป:

  • เบ„เปเบฒเบชเบฑเปˆเบ‡ "เบ‚เปเป‰เบกเบนเบ™" เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”เบชเบดเบ™เบ„เป‰เบฒเป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบŠเบธเบ”เปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™.
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš syntax "use<..>" เปƒเบ™ "impl Trait", เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ”เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡, "impl Trait + use<'x, T>" เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต "x" เปเบฅเบฐ "T" เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰.
  • syntax เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡ pointers เบ”เบดเบšเป„เบ”เป‰เบ–เบทเบเบชเบฐเป€เบซเบ™เบต, เปเบ—เบ™ macro เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™: macro "addr_of!(expr)" เป„เบ”เป‰เบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบ "&raw const expr", เปเบฅเบฐ "addr_of_mut!(expr)" macro เป„เบ”เป‰เบ–เบทเบเปเบ—เบ™เบ—เบตเปˆ. เป‚เบ”เบ โ€œ&raw mutโ€ operator exprโ€. struct Packed { not_aligned_field: i32, } fn main() { เปƒเบซเป‰ p = Packed { not_aligned_field: 1_82 }; // เบงเบดเบ—เบตเป€เบเบปเปˆเบฒเบชเป‰เบฒเบ‡เบ•เบปเบงเบŠเบตเป‰เบ”เบดเบšเปƒเบซเป‰ ptr = std::ptr::addr_of!(p.not_aligned_field); // เบงเบดเบ—เบตเปƒเปเปˆเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบŠเบตเป‰เบ”เบดเบšเปƒเบซเป‰ ptr = &raw const p.not_aligned_field; เปƒเบซเป‰ val = เบšเปเปˆเบ›เบญเบ”เป„เบž { ptr.read_unaligned() }; }
  • เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ›เบญเบ”เป„เบžเปเบฅเบฐเบ„เบปเบ‡เบ—เบตเปˆเบ”เป‰เบงเบ 'static' เบ•เบฐเบซเบผเบญเบ”เบŠเบตเบงเบดเบ”เบžเบฒเบเปƒเบ™ extern blocks เบ”เป‰เบงเบเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "เบšเปเปˆเบ›เบญเบ”เป„เบž" (เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ "unsafe extern" เบชเบฒเบกเบฒเบ”เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "เบšเปเปˆเบ›เบญเบ”เป„เบž"): unsafe extern { pub safe static TAU : f64; pub safe fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
  • no_mangle, link_section เปเบฅเบฐ export_name attributes, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ™เปเบฒเป„เบ›เบชเบนเปˆเบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”, เบ•เบญเบ™เบ™เบตเป‰เบ–เบทเบงเปˆเบฒเบšเปเปˆเบ›เบญเบ”เป„เบž เปเบฅเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบธเบ‡ "เบšเปเปˆเบ›เบญเบ”เป„เบž" เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบฎเบนเบšเปเบšเบšเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ‚เป‰เบฒเบกเบ›เบฐเป€เบžเบ”เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒเป„เบ”เป‰, เป€เบŠเบฑเปˆเบ™ "enum Void {}" เบซเบผเบทเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบกเบตเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เป„เบ”เป‰. เปƒเบŠเป‰ std::convert::Infallible; pub fn unwrap_without_panic (x: เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš ) -> T { เปƒเบซเป‰ Ok(x) = x; // "Err" เบชเบฒเบกเบฒเบ”เบ‚เป‰เบฒเบกเป„เบ”เป‰ x }
  • เบ›เบฐเป€เบžเบ”เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเป€เบฅเบเบˆเบธเบ”เบฅเบญเบ (f32 เปเบฅเบฐ f64) เบกเบตเบžเบถเบ”เบ•เบดเบเปเบฒเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบ„เปˆเบฒ NaN เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ•เบปเบงเป€เบฅเบ (0.0/0.0), เปเบฅเบฐเบเบฑเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบˆเบธเบ”เบฅเบญเบเบขเบนเปˆเปƒเบ™ const fn.
  • เปเบœเปˆเบ™เปเบŠเบเบ›เบฐเบเบญเบšเปƒเบซเป‰เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เปƒเบŠเป‰ operands เบ—เบตเปˆเบกเบตเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "const" เป€เบžเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบ„เปˆเบฒเบ•เบปเบงเป€เบฅเบ integer เป‚เบ”เบเบเบปเบ‡เป‚เบ”เบเบšเปเปˆเป„เบ”เป‰เป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ—เบฐเบšเบฝเบ™. const MSG: &str = "เบชเบฐเบšเบฒเบเบ”เบต, เป‚เบฅเบ!\n"; unsafe { core::arch::asm!( โ€œmov rdx, {LEN} // the instruction 'mov rdx, 14โ€ฒโ€ will be generated, LEN = const MSG.len(), โ€ฆ ); }
  • เบเบฒเบ™เปเบเป‰เป„เบ‚เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ”เป‰เบงเบเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "static" เปเบกเปˆเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ—เบตเปˆเบ›เบญเบ”เป„เบžเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบšเบฅเบฑเบญเบเบ—เบตเปˆเบšเปเปˆเบ›เบญเบ”เป„เบž (เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ "&raw mut" เปเบฅเบฐ "&raw const" เบšเปเปˆเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡ operand เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบชเป‰เบฒเบ‡เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบกเบฑเบ™): static mut STATIC_MUT: เบ›เบฐเป€เบžเบ” = เบ›เบฐเป€เบžเบ”::new( ); extern "C" { static EXTERN_STATIC: เบ›เบฐเป€เบžเบ”; } fn main() { เปƒเบซเป‰ static_mut_ptr = &raw mut STATIC_MUT; เปƒเบซเป‰ extern_static_ptr = &raw const EXTERN_STATIC; }
  • เบžเบฒเบเบชเปˆเบงเบ™เปƒเบซเบกเปˆเบ‚เบญเบ‡ API เป„เบ”เป‰เบ–เบทเบเบเป‰เบฒเบเป„เบ›เบขเบนเปˆเปƒเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡, เบฅเบงเบกเบ—เบฑเบ‡เบงเบดเบ—เบตเบเบฒเบ™เปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฑเบเบชเบฐเบ™เบฐเบ•เปˆเบฒเบ‡เป†เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡:
    • std::thread::Builder::spawn_unchecked
    • std::str::CharIndices::offset
    • std::option::Option::is_none_or
    • [T]::is_sorted
    • [T]::is_sorted_by
    • [T]::is_sorted_by_key
    • Iterator::is_sorted
    • Iterator::is_sorted_by
    • Iterator::is_sorted_by_key
    • std::future::Ready::into_inner
    • std::iter::repeat_n
    • impl DoubleEndedIterator เบชเปเบฒเบฅเบฑเบš Take

      เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™