ĂshtĂ« publikuar njĂ« lançim i gjuhĂ«s sĂ« programimit tĂ« pĂ«rgjithshĂ«m Rust 1.76, tĂ« cilin e zhvillon Mozilla, por tani po zhvillohet nĂ«n mbikĂ«qyrjen e njĂ« organizate tĂ« pavarur jofitimprurĂ«se, Rust Foundation. Gjuha fokusohet nĂ« punĂ«n e sigurt me_memorinĂ« dhe ofron mjete pĂ«r tĂ« arritur njĂ« paralelizĂ«m tĂ« lartĂ« nĂ« ekzekutimin e detyrave, duke u shmangur pĂ«rdorimit tĂ« mbledhĂ«sve tĂ« plehrave dhe runtime (runtime pĂ«rbĂ«het nga inicializimi bazĂ« dhe mbĂ«shtetje 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:
- Dokumentacioni ka një seksion të veçantë që përshkruan pajtueshmërinë e llojeve të ndryshme të argumenteve dhe tipo të vlerave të kthimit të funksioneve në nivelin ABI. Krahasuar me versionet e mëparshme, është garantuar pajtueshmëria në nivelin ABI të tipave "char" dhe "u32", të cilët kanë përmasat dhe përputhjen e njëjtë.
- Përveç thirrjes së mëparshme "any::type_name::()", e cila kthen një përshkrim tekstual për llojin e specifikuar në parametrin "T", është shtuar funksioni "type_name_of_val(&T)", i cili lejon marrjen e informacionit për llojin bazuar në çdo referencë të paemëruar. fn get_iter() -> impl Iterator { [1, 2, 3].into_iter() } fn main() { let iter = get_iter(); let iter_name = std::any::type_name_of_val(&iter); let sum: i32 = iter.sum(); println!("Shuma e `{iter_name}` është {sum}."); } Në daljen do të kemi: Shuma e `core::array::iter::IntoIter` është 6.
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- Arc::unwrap_or_clone
- Rc::unwrap_or_clone
- Result::inspect
- Result::inspect_err
- Option::inspect
- type_name_of_val
- std::hash::{DefaultHasher, RandomState}
- ptr::{from_ref, from_mut}
- ptr::addr_eq
- ĂshtĂ« realizuar njĂ« niveli i tretĂ« mbĂ«shtetje pĂ«r platformat {x86_64,i686}-win7-windows-msvc, aarch64-apple-watchos, arm64e-apple-ios dhe arm64e-apple-darwin. Niveli i tretĂ« nĂ«nkupton mbĂ«shtetje bazike, por pa testim automatizuar, publikim tĂ« ndĂ«rtimeve zyrtare dhe verifikimin e mundĂ«sisĂ« pĂ«r ndĂ«rtimin e kodit.
Një veçori e veçantë është demonstrimi i planifikuesit eksperimental të detyrave scx_rustland, i shkruar në gjuhën Rust dhe ekzekutur në hapësirën e përdoruesit (shkëputja e logjikës së planifikimit të detyrave nga bërthama në hapësirën e përdoruesit është realizuar me ndihmën e veglave sched-ext që përdorin BPF). Planifikuesi është optimizuar për të rritur prioritetin e detyrave interaktive përballë detyrave që ngarkojnë shumë CPU. Për shembull, në provën e nisjes së një aplikacioni lojrash në të njëjtën kohë me montimin e bërthamës, planifikuesi scx_rustland ka lejuar arritjen e një FPS më të lartë në lojë, krahasuar me përdorimin e planifikuesit standard EEVDF.
Burimi: opennet.ru
