Lëshimi i gjuhës së programimit Rust 1.80

ËshtĂ« publikuar njĂ« version i ri i gjuhĂ«s programim tĂ« pĂ«rgjithshĂ«m Rust 1.80, e cila Ă«shtĂ« zhvilluar fillimisht nga projekti Mozilla dhe tani Ă«shtĂ« nĂ«n mbĂ«shtetjen e njĂ« organizate tĂ« pavarur qĂ« nuk Ă«shtĂ« fitimprurĂ«se, Rust Foundation. Gjuha fokuson sigurinĂ« nĂ« punĂ«n me kujtesĂ«n dhe ofron mjete pĂ«r arritjen e njĂ« paralelizmi tĂ« lartĂ« nĂ« ekzekutimin e detyrave, pa pĂ«rdorimin e njĂ« mbledhĂ«si tĂ« plehrave dhe runtime (runtime Ă«shtĂ« i reduktuar nĂ« inicializimin bazĂ« dhe mirĂ«mbajtjen e bibliotekĂ«s standarde).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin nga puna me nivel të ulët me kujtesën, siç janë referimi në një zonë kujtese pas çlirimit të saj, dereferimi i treguesve null, tejkalimi i kufijve të tamponëve etj. Për shpërndarjen e biblioteka, për të siguruar ndërtimin dhe menaxhimin e varësive, projekti zhvillon menaxherin e paketave Cargo. Për ruajtjen e bibliotekave, mbështetet depoja crates.io.

Përdorimi i sigurt i memories sigurohet në Rust gjatë kompilimit përmes verifikimit të lidhjeve, gjurmimit të pronësisë së objekteve, përllogaritjes së kohëzgjatjes së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në memorie gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtje nga tejkalimet e numrave të plotë, kërkon inicializim të detyrueshëm të vlerave të variablave para përdorimit, menaxhon më mirë gabimet në bibliotekën standarde, aplikon konceptin e lidhjeve dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.

TĂ« rejat kryesore:

  • JanĂ« shtuar strukturat LazyCell dhe LazyLock, qĂ« lejojnĂ« qĂ« inicializimi i tĂ« dhĂ«nave tĂ« shtyhet deri nĂ« aksesin e parĂ« (thirrja e funksionit tĂ« inicializimit ndodh gjatĂ« pĂ«rpjekjes pĂ«r tĂ« aksesuar vlerĂ«n). LazyLock ndryshon nga LazyCell pĂ«r mbĂ«shtetje tĂ« mjeteve tĂ« sinkronizimit pĂ«r pĂ«rdorim nĂ« kodin shumĂ«ththellim. 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!("Koha lenĂ« nĂ« fije Ă«shtĂ« {:?}", LAZY_TIME.duration_since(start)); }); println!("Koha lenĂ« nĂ« krye Ă«shtĂ« {:?}", LAZY_TIME.duration_since(start)); }); }
  • NĂ« kompilatorin rustc Ă«shtĂ« stabilizuar opsioni "--check-cfg", i cili aktivizohet nĂ« menaxherin e paketave pĂ«r tĂ« kontrolluar tĂ« gjitha emrat dhe vlerat qĂ« pĂ«rcaktohen pĂ«rmes cfg, duke pĂ«rfshirĂ« emrat nga Cargo.toml. fn main() { println!("PĂ«rshĂ«ndetje, botĂ«!"); #[cfg(feature = "crayon")] rayon::join( || println!("PĂ«rshĂ«ndetje, GjĂ«ja NjĂ«!"); || println!("PĂ«rshĂ«ndetje, GjĂ«ja Dy!"); ); } warning: vlerĂ« e papritur pĂ«r kushtin `cfg`: `crayon` —> src/main.rs:4:11 | 4 | #[cfg(feature = "crayon")] | ^^^^^^^^^^——— | | | ndihmĂ«: ka njĂ« vlerĂ« tĂ« pritur me emĂ«r tĂ« ngjashĂ«m: `"rayon"`
  • NĂ« shkablone lejohet specifikimi i gamave nĂ« formatin "a..b" dhe "..b", qĂ« janĂ« tĂ« ngjashme me pĂ«rdorimin e shprehjeve Range dhe RangeTo. 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", } }
  • NjĂ« sasi e re API Ă«shtĂ« kaluar nĂ« kategorinĂ« stabile, pĂ«rfshirĂ« stabilizimin e metodave dhe implementimeve tĂ« tipazheve:
    • impl Default pĂ«r Rc
    • impl Default pĂ«r Rc
    • impl Default pĂ«r Rc
    • impl Default pĂ«r Arc
    • impl Default pĂ«r Arc
    • impl Default pĂ«r Arc
    • impl IntoIterator pĂ«r Box
    • impl FromIterator pĂ«r Box
    • impl FromIterator pĂ«r 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
  • Karakteristika «const», qĂ« pĂ«rcakton mundĂ«sinĂ« e pĂ«rdorimit nĂ« çdo kontekst nĂ« vend tĂ« konstantave, Ă«shtĂ« aplikuar nĂ« funksionet:
    • ::last_chunk
    • BinaryHeap::new
  • ËshtĂ« realizuar niveli i tretĂ« i mbĂ«shtetjes pĂ«r platformĂ«n x86_64-unknown-linux-none. Niveli i tretĂ« pĂ«rfshin mbĂ«shtetje bazĂ«, por pa testi automatizuar, publikime zyrtare dhe kontrolle tĂ« mundĂ«sisĂ« pĂ«r ndĂ«rtimin e kodit.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster