ĂshtĂ« publikuar versioni 1.84 i gjuhĂ«s sĂ« programimit tĂ« pĂ«rgjithshĂ«m Rust, e cila u krijua fillimisht nga Mozilla, por tani po zhvillohet nĂ«n mbĂ«shtetje tĂ« organizatĂ«s jo fitimprurĂ«se Rust Foundation. Gjuha pĂ«rqendrohet nĂ« sigurinĂ« e menaxhimit tĂ« memories dhe ofron mjete pĂ«r tĂ« arritur njĂ« paralelizĂ«m tĂ« lartĂ« nĂ« ekzekutimin e detyrave, duke shmangur pĂ«rdorimin e mbledhĂ«sit tĂ« plehrave dhe runtime (runtime reduktohet nĂ« inicializimin bazĂ« dhe mbĂ«shtetje pĂ«r biblioteken 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:
- NĂ« menaxherin e paketave Cargo, mekanizmi i trajtimit tĂ« varĂ«sive Ă«shtĂ« stabilizuar, duke zgjedhur versionet e komponenteve tĂ« varura duke marrĂ« parasysh pĂ«rputhshmĂ«rinĂ« me versionet e kompilatorit Rust, tĂ« shpallura si tĂ« mbĂ«shtetura minimalisht nga projekti (MSRV, Minimum Supported Rust Version). Kjo mundĂ«si e re lejon pĂ«rmirĂ«simin e punĂ«s sĂ« mbĂ«shtetjes duke eliminuar nevojĂ«n pĂ«r zgjedhjen manuale tĂ« versioneve tĂ« vjetra tĂ« çdo varĂ«sie nĂ« projekte qĂ« ruajnĂ« pĂ«rputhshmĂ«rinĂ« me versionet mĂ« tĂ« vjetra tĂ« veglave Rust. Rejimi i ri i pĂ«rcaktimit tĂ« varĂ«sive do tĂ« aktivizohet si parazgjedhje nĂ« versionin Rust 1.85, ndĂ«rsa aktualisht Ă«shtĂ« nĂ« formĂ«n e njĂ« opsioni, pĂ«r aktivizimin e tĂ« cilit nĂ« seksionin "[resolver]" nĂ« skedarin ".cargo/config.toml" duhet tĂ« specifikohet âincompatible-rust-versions = "fallback"â.
- Ka filluar përkthimi i kompilatorit në një trajtues të ri të llojeve (trait solver), i destinuar për të kontrolluar kufijtë e zbatueshmërisë së tipazheve, normalizimin e llojeve dhe vlerësimin e përputhshmërisë së llojeve. Në versionin 1.84, trajtuesi i ri është aktivizuar për të verifikuar koherencën e realizimeve të tipazheve, domethënë për të vlerësuar ekzistencën e më shumë se një tipaz për llojin në fjalë, duke marrë parasysh kodin nga crate-paketat e tjera. Verifikimi i përmendur ka lejuar eliminimin e problemeve në realizimin e vjetër të trajtuesit të llojeve, që potencialisht mund të çonin në konflikte për shkak të mbivendosjes së realizimeve të ndryshme të tipazheve.
- Një API i ri "Provenance i Rreptë" është propozuar, i cili mund të përdoret për të konvertuar treguesin në një numër të plotë dhe anasjelltas, duke pasur parasysh metadatet e lidhura me treguesin që përmbajnë informacion mbi origjinën dhe fushën e përdorimit (përveç adresës, një vlerë "provenance" lidhet me treguesin për të dhënë informacion mbi lidhjet me tregues të tjerë, duke lejuar përcaktimin e kur dhe ku mund të aksesojë memoria treguesi). Kur konvertohet treguesi në numër të plotë dhe anasjelltas, ndodhin sjellje të paqartë për shkak të vështirësive në ndjekjen e origjinës së treguesit rezultues. API i ri lejon kryerjen e operacioneve të nivelit të ulët me tregues, të tilla si ruajtja e informacionit shtesë në bitët e posaçëm të treguesit, pa konvertuar treguesin në një numër të plotë.
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- Ipv6Addr::is_unique_local
- Ipv6Addr::is_unicast_link_local
- core::ptr::with_exposed_provenance
- core::ptr::with_exposed_provenance_mut
- ::addr
- ::expose_provenance
- ::with_addr
- ::map_addr
- ::isqrt
- ::checked_isqrt
- ::isqrt
- NonZero::isqrt
- core::ptr::without_provenance
- core::ptr::without_provenance_mut
- core::ptr::dangling
- core::ptr::dangling_mut
- Pin::as_deref_mut
- T symboli «const» është aplikuar në funksionet:
- AtomicBool::from_ptr
- AtomicPtr::from_ptr
- AtomicU8::from_ptr
- AtomicU16::from_ptr
- AtomicU32::from_ptr
- AtomicU64::from_ptr
- AtomicUsize::from_ptr
- AtomicI8::from_ptr
- AtomicI16::from_ptr
- AtomicI32::from_ptr
- AtomicI64::from_ptr
- AtomicIsize::from_ptr
- ::is_null
- ::as_ref
- ::as_mut
- Pin::new
- Pin::new_unchecked
- Pin::get_ref
- Pin::into_ref
- Pin::get_mut
- Pin::get_unchecked_mut
- Pin::static_ref
- Pin::static_mut
- E stabilizuar mbështetje për inline assembler për arkitat s390x dhe Arm64EC.
- Për platformën e synuar WebAssembly, mbështetje për funksionalitetin multivalue, reference-types dhe tail-call është stabilizuar.
- ĂshtĂ« realizuar niveli i dytĂ« i mbĂ«shtetjes pĂ«r platformĂ«n wasm32v1-none. Niveli i dytĂ« i mbĂ«shtetjes nĂ«nkupton garantimin e ndĂ«rtimit.
Mund të përmenden gjithashtu disa projekte të lidhura me Rust:
- ĂshtĂ« publikuar versione i sistemit operativ Tock 2.2, i shkruar nĂ« gjuhĂ«n Rust dhe i fokusuar nĂ« pĂ«rdorimin nĂ« mikro-kontrollerĂ«. Sistemi mundĂ«son ekzekutimin e disa aplikacioneve qĂ« nuk meritojnĂ« besim nĂ« pajisjet e integruara me memorie tĂ« kufizuar RAM, si sensorĂ«t, TPM (Moduli i PlatformĂ«s sĂ« Besuar), çelĂ«sat e autentikimit dhe pajisjet e veshura. PĂ«rdoren platforma me mikro-kontrollerĂ« tĂ« bazuar nĂ« arkitekturĂ«n ARM Cortex-M dhe RISC-V. NjĂ« veçori kyçe e Tock Ă«shtĂ« izolimi i niveleve tĂ« aplikacioneve, njĂ«sisĂ« qendrore dhe layers me drejtorĂ«, si dhe izolimi i çdo aplikacioni dhe drejtori tĂ« veçantĂ«. Izolimi arrihet si nga mundĂ«sitĂ« e gjuhĂ«s Rust, ashtu edhe nga ndarja nĂ« nivelin e mbrojtjes sĂ« memories.
- Projekti VEKOS (Sistemi i Verifikuar Eksperimental i Kernelit) zhvillon kernelin e sistemit operativ në gjuhën Rust, duke siguruar verifikimin e komponenteve që ekzekutohen. Në çdo operacion me sistemin e skedarëve, krijimin e proceseve dhe ndarjen e memories, formohet një konfirmimkriptografik, që lejon verifikimin e operacionit gjatë ekzekutimit (implementimi krahasohet me përdorimin e blockchain për verifikimin e veprimeve në sistemin operativ). Në sistemin e skedarëve VKFS, për të siguruar integritetin dhe mbrojtjen nga ndryshimet retroaktive, përdoret struktura 'pemë Merkle' (Merkle Tree), ku çdo degë verifikon të gjitha degët dhe nyjat nënështrohen, falë hashimit të strukturës pemore. Ndarja e memories kryhet në modalitetin COW (Copy-On-Write).
- NjĂ« grup hulumtuesish nga Microsoft dhe Inria po zhvillon njĂ« nĂ«ngrup tĂ« gjuhĂ«s C â Mini-C, e cila Ă«shtĂ« e destinuar pĂ«r pĂ«rkthimin automatike tĂ« programeve tĂ« shkruara nĂ« gjuhĂ«n C nĂ« njĂ« pĂ«rfaqĂ«sim nĂ« gjuhĂ«n Rust. Ndryshe nga kompajleri c2rust, projekti i ri lejon gjenerimin e kodit Rust pa pĂ«rdorimin e unsafe, por Ă«shtĂ« kryesisht i orientuar drejt transformimit tĂ« projekteve C qĂ« kanĂ« dĂ«shmi formale tĂ« besueshmĂ«risĂ«. Kuptohet se do tĂ« jetĂ« mĂ« e lehtĂ« fillimisht tĂ« pĂ«rkthehet projekti C nĂ« njĂ« pĂ«rfaqĂ«sim nĂ« Mini-C, nĂ« tĂ« cilin nuk lejohen operacione aritmetike me tregues, sesa tĂ« rishkruhet blloket unsafe pas kompajlimit direkt nga C nĂ« Rust.
Implementimi i kompajlerit bazohet në mjetin KaRaMeL. Mini-C është zhvilluar dhe testuar në kuadër të projektit të rishkrimit në Rust të bibliotekës kriptografike HACL*, për të cilën është ofruar një dëshmi formale e besueshmërisë. Një dëshmi e tillë është përdorur për të demonstruar mundësinë e gjenerimit të kodit të sigurt në Rust nga Mini-C.
- Daniel Stenberg, autori i utilitarit curl, njoftoi se ka ndërprerë zhvillimin dhe mbështetje për projektin Curl, një backend alternativ HTTP, i shkruar në Rust duke përdorur bibliotekën Hyper. Si shkak u përmend mungesa e interesit nga zhvilluesit dhe përdoruesit.
- U njoftua për lëshimin beta të shell-it Fish 4.0, e cila është riparë në gjuhën Rust. Theksohet se pas dy vitesh zhvillimi, kodi i bazës së Fish u la në mënyrë të plotë nga C++ në Rust. Kalimi në Rust ndihmoi në zgjidhjen e problemeve me shumëthënien, siguroi mjete moderne që zbulojnë gabimet gjatë fazës së kompilimit, rriti sigurinë në punën me kujtesën dhe e bëri projektin më tërheqës për zhvilluesit e rinj.
- Projekti Tor publikoi versionin Arti 1.3.2, një implementim alternativ të klientit Tor në gjuhën Rust. Arti ofron një bibliotekë të integruar që mund të përdoret nga aplikacione të ndryshme. Gjatë krijimit të Arti, është marrë parasysh përvoja e kaluar e zhvillimit të Tor për të shmangur problemet e njohura arkitektonike, duke e bërë projektin më modular dhe eficiente. Dega 1.x është shënuar si e përshtatshme për përdorim nga përdoruesit e zakonshëm dhe ofron të njëjtin nivel privatësie, përdorueshmërie dhe stabiliteti si implementimi kryesor në gjuhën C. Në versionin e ri, vazhdon zhvillimi i RPC, përgatitet implementimi i mbështetjes për relé dhe shtohet mbrojtja nga sulmet DoS në shërbimet Onion.
- ĂshtĂ« publikuar versioni i motorit tĂ« lojĂ«rave Bevy 0.15, i shkruar nĂ« Rust. NĂ« motor pĂ«rdoret njĂ« model datacenter (Data Driven) pĂ«r pĂ«rcaktimin e logjikĂ«s sĂ« lojĂ«s, i ndĂ«rtuar mbi njĂ« set komponentĂ«sh tĂ« gatshĂ«m Bevy ECS (Entity Component System), tĂ« cilĂ«t mund tĂ« ekzekutohen paralelisht. MbĂ«shtetet renderimi 2D dhe 3D, animacioni skeletor, pĂ«rcaktimi i grafit tĂ« renderimit, sistemi i formimit tĂ« skenave, njĂ« kornizĂ« pĂ«r ndĂ«rtimin e ndĂ«rfaqes sĂ« pĂ«rdoruesit, dhe modificimi i skenave dhe burimeve pa nevojĂ«n e rihapjes.
- ĂshtĂ« publikuar editori konsolĂ« Helix 25.01, i shkruar nĂ« Rust dhe qĂ« shtrin idetĂ« e krijuara nĂ« vim dhe neovim. MbĂ«shtetet integrimi me serverĂ«t LSP dhe me Tree-sitter, pĂ«rzgjedhja e disa blloqeve nĂ« tĂ« njĂ«jtĂ«n kohĂ«, pĂ«rdorimi i disa kursori gjatĂ« redaktimit, temat e paraqitjes, dhe protokolli i debug-ut DAP (Debug Adapter Protocol).
- Në motorin e shfletuesit Servo, i shkruar në Rust, është shtuar mbështetje për modalitetin e errët. Wshtë reduktuar madhësia e shfletuesit ServoShell me 20%. Mbështetje për specifikimet web është përmirësuar deri në mundësinë e hyrjes dhe leximit të mesazheve në Discord (dërgimi i mesazheve është ende i pamundur).
- Kompania Mozilla prezantoi instrumentin Uniffi for React Native për krijimin e moduleve për React Native në gjuhën Rust.
- U krye testimi i performancës së koduesve të imazhëve në formatin PNG. Dekoduesit në Rust (png, zune-png, wuffs) dolën më të shpejtë se dekoduesit në C (libpng, spng, stb_image). Për shembull, paketa crate png (image-rs) e tejkaloi libpng me 1.8 herë në sistemin x86 dhe me 1.5 herë në sistemin ARM. image-rs: 375.401 MP/s (mesatar) 318.632 MP/s (geomean) zune-png: 376.649 MP/s (mesatar) 302.529 MP/s (geomean) wuffs: 376.205 MP/s (mesatar) 287.181 MP/s (geomean) libpng: 208.906 MP/s (mesatar) 173.034 MP/s (geomean) spng: 299.515 MP/s (mesatar) 235.495 MP/s (geomean) stb_image: 234.353 MP/s (mesatar) 171.505 MP/s (geomean)
Burimi: opennet.ru
