ĂshtĂ« publikuar versioni i ri i gjuhĂ«s sĂ« programimit Rust 1.96, i themeluar nga projekti Mozilla, por qĂ« tani zhvillohet nĂ«n kujdesin e organizatĂ«s sĂ« pavarur jofitimprurĂ«se Rust Foundation. Gjuha fokusohet te puna e sigurt me memorien dhe ofron mjete pĂ«r arritjen e njĂ« niveli tĂ« lartĂ« paralelizmi nĂ« ekzekutimin e detyrave, pa pĂ«rdorur garbage collector dhe runtime (runtime kufizohet te inicializimi bazĂ« dhe mirĂ«mbajtja e bibliotekĂ«s standarde).
Metodat e punës me memorie në Rust janë të orientuara për të eliminuar gabimet gjatë manipulimit të treguesve dhe për të mbrojtur nga problemet që lindin nga puna me nivel të ulët me memorinë, siç janë akseset në zona memorien pas lirimit të saj, dereferencimi i treguesve null, tejkalimi i kufijve të bufeve etj. Për shpërndarjen e bibliotekave, sigurinë e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me ndihmën e menaxherit të paketave Cargo. Mbështetet një depo për bibliotekat, crates.io.
Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.
Novitetet kryesore:
- ĂshtĂ« shtuar moduli range me implementimin e tipeve tĂ« reja, tĂ« zhvilluara pĂ«r tĂ« zĂ«vendĂ«suar tipet e vjetruara Range, RangeInclusive, RangeToInclusive dhe RangeFrom, dhe qĂ« mundĂ«sojnĂ« ruajtjen e intervaleve nĂ« struktura Copy. Tipi Range pĂ«rcakton intervale tĂ« kufizuara nga vlera minimale dhe maksimale e lejuar (por pa e pĂ«rfshirĂ« atĂ«), tipi RangeFrom pĂ«rcakton numra duke filluar nga vlera e dhĂ«nĂ«, ndĂ«rsa tipi RangeInclusive pĂ«rcakton vlerat e intervalit tĂ« caktuar me tĂ« dy kufijtĂ« e tij. NĂ« versionet e ardhshme do tĂ« shtohen gjithashtu tipet RangeFull dhe RangeTo, implementimi i vjetĂ«r do tĂ« zhvendoset nĂ« core::range::legacy::*, ndĂ«rsa sintaksa «N..M» do tĂ« kalojĂ« te varianti i ri i tipeve.
Tipet e reja ndryshojnë në atë se, në vend të tiparit Iterator, implementojnë tiparin IntoIterator, domethënë në vend të iteratorit të integruar përcaktojnë mënyrën se si tipi shndërrohet në iterator. Kjo qasje bën të mundur përdorimin e operacionit të kopjimit me tipet e reja (tipari Copy, që tregon se vlerat e tipit mund të dyfishohen me një kopjim të thjeshtë), gjë që më parë nuk ishte e mundur për shkak të papajtueshmërisë me tipet që kanë iteratorë të integruar.
Për shembull, tipet e reja bëjnë të mundur ruajtjen e kufijve të një slice në një strukturë që kopjohet plotësisht pa ruajtje të ndarë të vlerave fillestare dhe përfundimtare:use core::range::Range;
#[derive(Clone, Copy)]
pub struct Span(Range);impl Span {
pub fn of(self, s: &str) -> &str {
&s[self.0]
}
} - Janë shtuar makrot «assert_matches!» dhe «debug_assert_matches!», të cilat verifikojnë nëse vlera përputhet me modelin e specifikuar dhe e ndërpresin ekzekutimin në rast mospërputhjeje. Nga shprehjet «assert!(matches!(..))» dhe «debug_assert!(matches!(..))» makrot e reja dallohen sepse shfaqin informacion debug me vlerat që shkaktuan dështimin. Për të shmangur konfliktet me makro të palëve të treta që ofrohen me emra të ngjashëm, makrot e reja kërkojnë importim të qartë të bibliotekës «core::assert_matches».
use core::assert_matches;
fn get_random_number() -> u32 {
4
}fn main() {
assert_matches!(get_random_number(), 1..=6);
} - GjatĂ« ndĂ«rtimit pĂ«r platformĂ«n e synuar WebAssembly, Ă«shtĂ« ndĂ«rprerĂ« kalimi te linker-i i opsionit «âallow-undefined», i cili lejonte lidhjen edhe nĂ« prani tĂ« simboleve tĂ« papĂ«rcaktuara qĂ« shndĂ«rroheshin nĂ« importe nga moduli «env». Tani, gjatĂ« ndĂ«rtimit pĂ«r WebAssembly, tĂ« gjitha simbolet qĂ« lidhen me linkimin duhet domosdoshmĂ«risht tĂ« jenĂ« tĂ« pĂ«rcaktuara si parazgjedhje. PĂ«r tĂ« rikthyer sjelljen e mĂ«parshme, mund tĂ« pĂ«rdoret ndryshorja e mjedisit «RUSTFLAGS=-Clink-arg=âallow-undefined» ose shprehja â#[link(wasm_import_module = «env»)]» nĂ« kod.
- Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
- assert_matches!
- debug_assert_matches!
- From for AssertUnwindSafe
- From for LazyCell
- From for LazyLock
- core::range::RangeToInclusive
- core::range::RangeToInclusiveIter
- core::range::RangeFrom
- core::range::RangeFromIter
- core::range::Range
- core::range::RangeIter
- Në menaxherin e paketave Cargo është eliminuar cenueshmëria CVE-2026-5223, e cila mund të përdoret për të mbishkruar kodin burimor të një crate tjetër në cache-in lokal të paketave nga i njëjti depo përmes manipulimit të lidhjeve simbolike brenda crate-eve të paketave. Cenueshmëria shfaqet vetëm gjatë punës me depo paketash të palëve të treta dhe nuk prek përdoruesit e depos crates.io, pasi në crates.io ndalohet ngarkimi i paketave me lidhje simbolike.
Gjithashtu vlen të përmendet publikimi (PDF) i rezultateve të një analize mbi përshtatshmërinë e gjuhës Rust për zhvillimin e firmware-it për mikrokontrollues dhe sisteme të integruara me burime të kufizuara.
Studimi u krye nga kompania STMicroelectronics me pjesëmarrjen e disa universiteteve evropiane. Dy ekipe të izoluara zhvilluesish morën detyrën të realizonin të njëjtin firmware për mikrokontrolluesit STM32U585AI me bërthamë Arm Cortex-M33. Ekipi i parë e zhvilloi firmware-in në C, ndërsa i dyti në Rust.
Testimi i punës së kryer nuk zbuloi përparësi të dukshme nga përdorimi i gjuhës C në vend të Rust gjatë zhvillimit të firmware-it për mikrokontrollues, në krahasim me konsumin e memories dhe performancën. Për më tepër, përdorimi i runtime-it sistemor të shkruar në Rust nga projekti i hapur Ariel OS bëri të mundur që konsumi i memories në projektin Rust të ishte më i ulët se në implementimin në gjuhën C, i cili përdorte stack-un tradicional për zhvillimin e firmware-it mbi bazën e bibliotekës newlib.
MadhĂ«sia e firmware-it pĂ«rfundimtar ishte 84100 bajt nĂ« projektin Rust dhe 76744 bajt nĂ« projektin C (10% mĂ« pak), por konsumi i memories operative nĂ« firmware-in Rust rezultoi dukshĂ«m mĂ« i ulĂ«t â 24640 bajt kundrejt 42608 bajt. Sa i pĂ«rket performancĂ«s, gjatĂ« testimit tĂ« prototipeve fillestare tĂ« zhvilluara nĂ« 6 javĂ«, implementimi nĂ« Rust ishte dy herĂ« mĂ« i shpejtĂ« se ai nĂ« C, por tĂ« dy implementimet mbetĂ«n ndjeshĂ«m pas performancĂ«s maksimale tĂ« llogaritur. Pas 4 javĂ«sh tĂ« dedikuara pĂ«r optimizim, tĂ« dy implementimet arritĂ«n afĂ«rsisht tĂ« njĂ«jtin rezultat, pranĂ« maksimumit tĂ« llogaritur.

Burimi: opennet.ru
