Programmeerimiskeele Rust 1.80 väljaanne

Avaldatud on universaalne programmeerimiskeel Rust 1.80, mille arendust algatas Mozilla, kuid mille edasist arengut toetab nüüd sõltumatu mittetulundusühing Rust Foundation. Keel keskendub mäluhalduse turvalisusele ja pakub vahendeid ülesannete kõrge paralleelsuse saavutamiseks, samas ilma prükkogumiseta ja käitusaegse (runtime) halduseta, mis piirdub põhikirje algse seadistamise ja standardraamatukogu hooldusega.

Rustis olevad mäluhaldusmeetodid vabastavad arendajad probleemidest, mis on seotud osutitega, ning kaitsevad madala taseme mälutöötlusest tulenevate probleemide, nagu vabanenud mälu alale juurdepääs, nullosutite de-referentseerimine, mälupiiride ületamine jne. Raamatukogude levitamiseks, projekti koostamise ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.

Rust tagab turvalise mälutöötluse kompilatsiooni ajal, kontrollides viiteid, jälgides objektide omandit, arvestades objektide elutsüklit (nähtavust) ja hinnates mälule juurdepääsu õigsust koodi käitamise ajal. Rust pakub ka meetmeid enamike täisarvude ületamiste vältimiseks, nõuab muutujate väärtuste algväärtustamist enne kasutamist, käsitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade minimeerimiseks.

Põhilised uuendused:

  • Lisatud struktuurid LazyCell ja LazyLock, mis võimaldavad andmete initsialiseerimist edasi lükata kuni esimese kasutamiseni (initsialiseerimisfunktsiooni väljakutse toimub väärtusele ligipääsu proovimisel). LazyLock erineb LazyCell'ist mitme lõime toetuse rakendamise poolest. use std::sync::LazyLock; use std::time::Instant; static LAZY_TIME: LazyLock = LazyLock::new(Instant::now); fn main() { let start = Instant::now(); std::thread::scope(|s| { s.spawn(|| { println!("Lõime laisk aeg on {:?}", LAZY_TIME.duration_since(start)); }); println!("Põhi laisk aeg on {:?}", LAZY_TIME.duration_since(start)); }); }
  • Kompilaatoris rustc on stabiliseeritud valik "--check-cfg", mida kasutatakse paketihalduris, et kontrollida kõiki cfg kaudu määratud nimesid ja väärtusi, sealhulgas nimesid failist Cargo.toml. fn main() { println!("Tere, maailm!"); #[cfg(feature = "crayon")] rayon::join( || println!("Tere, asi Üks!"), || println!("Tere, asi Kaks!"), ); } warning: ootamatu `cfg` seisundi väärtus: `crayon` —> src/main.rs:4:11 | 4 | #[cfg(feature = "crayon")] | ^^^^^^^^^^——— | | | abi: ootab, et sellise nimega väärtus on: `"rayon"`
  • Mallides on lubatud määrata vahemikke formaatides "a..b" ja "..b", mis sarnanevad vahemike jaotuste ja RangeTo kasutamisele. 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); match n { ..K => "", K..M => "k", M..G => "M", G.. => "G", } }
  • Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
    • impl Default for Rc
    • impl Default for Rc
    • impl Default for Rc
    • impl Default for Arc
    • impl Default for Arc
    • impl Default for Arc
    • impl IntoIterator for Box
    • impl FromIterator for Box
    • impl FromIterator for Box
    • LazyCell
    • LazyLock
    • Duration::div_duration_f32
    • Duration::div_duration_f64
    • Option::take_if
    • Seek::seek_relative
    • BinaryHeap::as_slice
    • NonNull::offset
    • NonNull::byte_offset
    • NonNull::add
    • NonNull::byte_add
    • NonNull::sub
    • NonNull::byte_sub
    • NonNull::offset_from
    • NonNull::byte_offset_from
    • NonNull::read
    • NonNull::read_volatile
    • NonNull::read_unaligned
    • NonNull::write
    • NonNull::write_volatile
    • NonNull::write_unaligned
    • NonNull::write_bytes
    • NonNull::copy_to
    • NonNull::copy_to_nonoverlapping
    • NonNull::copy_from
    • NonNull::copy_from_nonoverlapping
    • NonNull::replace
    • NonNull::swap
    • NonNull::drop_in_place
    • NonNull::align_offset
    • ::split_at_checked
    • ::split_at_mut_checked
    • str::split_at_checked
    • str::split_at_mut_checked
    • str::trim_ascii
    • str::trim_ascii_start
    • str::trim_ascii_end
    • ::trim_ascii
    • ::trim_ascii_start
    • ::trim_ascii_end
    • Ipv4Addr::BITS
    • Ipv4Addr::to_bits
    • Ipv4Addr::from_bits
    • Ipv6Addr::BITS
    • Ipv6Addr::to_bits
    • Ipv6Addr::from_bits
    • Vec::::into_flattened
    • ::as_flattened
    • ::as_flattened_mut
  • Konstantse märgendiga `const`, mis määrab võimaluse kasutada konstandina igas kontekstis, on rakendatud funktsioonides:
    • ::last_chunk
    • BinaryHeap::new
  • Tugi kolmandal tasemel on rakendatud platvormile x86_64-unknown-linux-none. Kolmas tase tähistab põhitoetust, kuid ilma automatiseeritud testimiseta, ametlike koostamiste avaldamiseta ja koodi koostamise kontrollimiseks.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster