Rust 1.80 Programming Language Release

Pelepasan bahasa pemrograman tujuan umum Rust 1.80, diadegkeun ku proyék Mozilla, tapi ayeuna dikembangkeun dina naungan organisasi nirlaba bebas Rust Foundation, parantos diterbitkeun. basa museurkeun kana kaamanan memori jeung nyadiakeun sarana pikeun ngahontal paralelisme pakasaban tinggi bari Ngahindarkeun pamakéan a collector sampah na runtime (runtime diréduksi jadi initialization dasar tur pamaliharaan perpustakaan baku).

Métode penanganan memori Rust nyalametkeun pamekar tina kasalahan nalika ngamanipulasi pointer sareng ngajagi tina masalah anu timbul kusabab panangan mémori tingkat rendah, sapertos aksés ka daérah mémori saatos dibébaskeun, dereferencing pointer null, overruns panyangga, jsb. Pikeun ngadistribusikaeun perpustakaan, nyadiakeun ngawangun jeung ngatur kagumantungan, proyék ngamekarkeun manajer pakét Cargo. Repositori crates.io dirojong pikeun perpustakaan hosting.

Kasalametan memori disayogikeun dina Rust dina waktos kompilasi ngaliwatan pamariksaan rujukan, ngalacak kapamilikan obyék, ngalacak umur obyék (skop), sareng ngira-ngira kabeneran aksés mémori nalika palaksanaan kode. Karat ogé nyadiakeun panyalindungan ngalawan overflows integer, merlukeun initialization wajib nilai variabel saméméh pamakéan, handles kasalahan hadé dina perpustakaan baku, nerapkeun konsép rujukan immutable sarta variabel sacara standar, nawarkeun ketak statik kuat pikeun ngaleutikan kasalahan logis.

Inovasi utama:

  • Ditambahkeun struktur LazyCell sareng LazyLock anu ngamungkinkeun anjeun pikeun nunda initialization data dugi ka aksés munggaran (fungsi initialization disebut nalika nyobian ngakses nilai). LazyLock béda ti LazyCell dina ngarojong fasilitas sinkronisasi pikeun pamakéan dina kode multi-threaded. ngagunakeun std :: sinkronisasi :: LazyLock; ngagunakeun std :: waktos :: Instan; statik LAZY_TIME: LazyLock = LazyLock::new(Instant::ayeuna); fn main() {hayu ngamimitian = Instan::ayeuna(); std::thread::scope(|s| {s.spawn(|| {println!("Thread puguh waktuna {:?}",LAZY_TIME.duration_tince(mimitian));});println!("Maal puguh waktosna {:?}", LAZY_TIME.duration_since(mimiti)); }
  • Kompiler rustc parantos nyaimbangkeun pilihan "--check-cfg", anu dianggo dina manajer pakét pikeun mariksa sadaya nami sareng niléy anu dijelaskeun ku cfg, kalebet nami ti Cargo.toml. fn main() {println!("Halo, dunya!"); #[cfg(fitur = "crayon")] rayon:: join( || println!("Halo, Hal Hiji!"), || println!("Halo, Hal Dua!"), ); } warning: nilai kaayaan `cfg` teu kaduga: `crayon` —> src/main.rs:4:11 | 4 | #[cfg(fitur = "crayon")] | ^^^^^^^^^^——— | | | pitulung: aya nilai ekspektasi kalawan ngaran sarupa: `»rayon»`
  • Citakan ngawenangkeun rentang bisa dieusian dina format "a..b" jeung "..b", nu sarupa jeung ngagunakeun Range na RangeTo éksprési. pub fn size_prefix (n: u32) -> & 'statik str {const K: u32 = 10u32.pow (3); const M: u32 = 10u32.pow (6); const G: u32 = 10u32.pow (9); cocog n { ..K => "", K..M => "k", M..G => "M", G.. => "G", } }
  • Bagian anyar tina API geus dipindahkeun ka kategori stabil, kaasup métode jeung palaksanaan Tret geus stabilized:
    • impl Default pikeun Rc
    • impl Default pikeun Rc
    • impl Default pikeun Rc<[T]>
    • impl Default pikeun Arc
    • impl Default pikeun Arc
    • impl Default pikeun Arc<[T]>
    • impl IntoIterator pikeun Box<[T]>
    • impl FromIterator pikeun Box
    • impl FromIterator pikeun Box
    • LazyCell
    • LazyLock
    • Lilana::div_duration_f32
    • Lilana::div_duration_f64
    • Pilihan:: take_if
    • Neangan::neangan_relative
    • BinaryHeap:: as_slice
    • NonNull:: offset
    • NonNull:: byte_offset
    • NonNull:: nambahkeun
    • NonNull:: byte_add
    • NonNull::sub
    • NonNull::byte_sub
    • NonNull:: offset_ti
    • NonNull:: byte_offset_from
    • NonNull:: maca
    • NonNull:: read_volatile
    • NonNull:: read_unaaligned
    • NonNull:: nulis
    • NonNull::write_volatile
    • NonNull::write_unaaligned
    • NonNull::write_bytes
    • NonNull::copy_to
    • NonNull:: copy_to_nonoverlapping
    • NonNull::copy_ti
    • NonNull:: copy_from_nonoverlapping
    • NonNull:: ngaganti
    • 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
    • <[[ T; N]]>::as_flattened
    • <[[ T; N]]>::as_flattened_mut
  • Atribut "const", anu nangtukeun kamungkinan ngagunakeunana dina konteks naon waé tinimbang konstanta, dianggo dina fungsi:
    • <[T]>::last_chunk
    • BinaryHeap:: anyar
  • Tingkat katilu pangrojong parantos dilaksanakeun pikeun platform x86_64-unknown-linux-none. Tingkat katilu ngawengku rojongan dasar, tapi tanpa nguji otomatis, penerbitan resmi ngawangun, atawa mariksa naha kode bisa diwangun.

sumber: opennet.ru

Mésér hosting anu dipercaya pikeun situs anu gaduh panyalindungan DDoS, server VPS VDS 🔥 Meser hosting situs wéb anu tiasa dipercaya nganggo panyalindungan DDoS, server VPS VDS | ProHoster