Ă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
