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

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

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

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

  • เป€เบžเบตเปˆเบกเป‚เบ„เบ‡เบชเป‰เบฒเบ‡ LazyCell เปเบฅเบฐ LazyLock เบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบทเปˆเบญเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบปเบ™เบเปˆเบงเบฒเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” (เบŸเบฑเบ‡เบŠเบฑเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒเป€เบกเบทเปˆเบญเบžเบฐเบเบฒเบเบฒเบกเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบกเบนเบ™เบ„เปˆเบฒ). LazyLock เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบ LazyCell เปƒเบ™เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ synchronization เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบฅเบฐเบซเบฑเบ”เบซเบผเบฒเบ threaded. เปƒเบŠเป‰ std::sync::LazyLock; เปƒเบŠเป‰ std::time::Instant; เบ„เบปเบ‡เบ—เบตเปˆ LAZY_TIME: LazyLock = LazyLock::new(Instant::now); fn main() { let start = Instant::now(); std:: thread::scope(|s| { s.spawn(|| { println!("เป€เบงเบฅเบฒเบ‚เบตเป‰เบ„เป‰เบฒเบ™เบเบฐเบ—เบนเป‰เปเบกเปˆเบ™ {:?}", LAZY_TIME.duration_since(start)); }); println!("Main lazy เป€เบงเบฅเบฒเปเบกเปˆเบ™ {:?}", LAZY_TIME.duration_since(start)); }
  • rustc compiler เป„เบ”เป‰เบชเบฐเบ–เบฝเบ™เบฅเบฐเบžเบฒเบšเบ—เบฒเบ‡เป€เบฅเบทเบญเบ "--check-cfg", เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบŠเบทเปˆเปเบฅเบฐเบ„เปˆเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบฅเบฐเบšเบธเบœเปˆเบฒเบ™ cfg, เบฅเบงเบกเบ—เบฑเบ‡เบŠเบทเปˆเบˆเบฒเบ Cargo.toml. fn main() { println!("เบชเบฐเบšเบฒเบเบ”เบต, เป‚เบฅเบ!"); #[cfg(feature = "crayon")] rayon::join( || println!("เบชเบฐเบšเบฒเบเบ”เบต,เบญเบฑเบ™เปœเบถเปˆเบ‡!"), || println!("เบชเบฐเบšเบฒเบเบ”เบต,เบญเบฑเบ™เบชเบญเบ‡!"), ); } warning: unexpected `cfg` condition value: `crayon` โ€”> src/main.rs:4:11 | 4 | #[cfg(feature = "crayon")] | ^^^^^^^^^^โ€”โ€”โ€” | | | เบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญ: เบกเบตเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบกเบตเบŠเบทเปˆเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™: `ยปrayonยป`
  • เปเบกเปˆเปเบšเบšเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เปƒเบ™เบฎเบนเบšเปเบšเบš "a..b" เปเบฅเบฐ "..b", เป€เบŠเบดเปˆเบ‡เบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบเบฒเบ™เปƒเบŠเป‰ Range เปเบฅเบฐ RangeTo expressions. pub fn size_prefix(n: u32) -> &'static str { const K: u32 = 10u32.pow(3); const M: u32 = 10u32.pow(6); const G: u32 = 10u32.pow(9); เบˆเบฑเบšเบ„เบนเปˆ n { ..K => "", K..M => "k", M..G => "M", G.. => "G", } }
  • เบžเบฒเบเบชเปˆเบงเบ™เปƒเบซเบกเปˆเบ‚เบญเบ‡ API เป„เบ”เป‰เบ–เบทเบเบเป‰เบฒเบเป„เบ›เบขเบนเปˆเปƒเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡, เบฅเบงเบกเบ—เบฑเบ‡เบงเบดเบ—เบตเบเบฒเบ™เปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฑเบเบชเบฐเบ™เบฐเบ•เปˆเบฒเบ‡เป†เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡:
    • impl เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบš Rc
    • impl เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบš Rc
    • impl เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบš Rc<[T]>
    • impl เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบš Arc
    • impl เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบš Arc
    • impl เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบš Arc<[T]>
    • impl IntoIterator เบชเปเบฒเบฅเบฑเบšเบเปˆเบญเบ‡<[T]>
    • impl FromIterator เบชเปเบฒเบฅเบฑเบšเบเปˆเบญเบ‡
    • impl FromIterator เบชเปเบฒเบฅเบฑเบšเบเปˆเบญเบ‡
    • LazyCell
    • LazyLock
    • เป„เบฅเบเบฐเป€เบงเบฅเบฒ::div_duration_f32
    • เป„เบฅเบเบฐเป€เบงเบฅเบฒ::div_duration_f64
    • เบ—เบฒเบ‡เป€เบฅเบทเบญเบ::take_if
    • เบŠเบญเบเบซเบฒ::seek_relative
    • BinaryHeap::as_slice
    • NonNull::offset
    • NonNull::byte_offset
    • NonNull::เบ•เบทเปˆเบก
    • NonNull::byte_add
    • NonNull::เบเปˆเบญเบ
    • NonNull::byte_sub
    • NonNull::offset_from
    • NonNull::byte_offset_from
    • NonNull::เบญเปˆเบฒเบ™
    • NonNull::read_volatile
    • NonNull::read_unaligned
    • NonNull::เบ‚เบฝเบ™
    • NonNull::write_volatile
    • NonNull::write_unaligned
    • NonNull::write_bytes
    • NonNull::copy_to
    • NonNull::copy_to_nonoverlapping
    • NonNull::copy_from
    • NonNull::copy_from_nonoverlapping
    • NonNull::เปเบ—เบ™เบ—เบตเปˆ
    • NonNull:: swap
    • NonNull::drop_in_place
    • NonNull::align_offset
    • <[T]>::split_at_checked
    • <[T]>::split_at_mut_checked
    • str::split_at_checked
    • str::split_at_mut_checked
    • str::trim_ascii
    • str::trim_ascii_start
    • str::trim_ascii_end
    • <[u8]>::trim_ascii
    • <[u8]>::trim_ascii_start
    • <[u8]>::trim_ascii_end
    • IPv4Addr::BITS
    • Ipv4Addr::to_bits
    • Ipv4Addr::from_bits
    • IPv6Addr::BITS
    • Ipv6Addr::to_bits
    • Ipv6Addr::from_bits
    • Vec::<[T; N]>::into_flattened
    • <[[ เบ— ; N]]>::as_flattened
    • <[[ เบ— ; N]]>::as_flattened_mut
  • เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "const", เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ”เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆ, เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ:
    • <[T]>::last_chunk
    • BinaryHeap::เปƒเปเปˆ
  • เบฅเบฐเบ”เบฑเบšเบ—เบตเบชเบฒเบกเบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเปเบžเบฅเบฐเบ•เบฐเบŸเบญเบก x86_64-unknown-linux-none. เบฅเบฐเบ”เบฑเบšเบ—เบตเบชเบฒเบกเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™, เปเบ•เปˆเบšเปเปˆเบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, เบซเบผเบทเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰.

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

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster