ĂshtĂ« publikuar versioni i gjuhĂ«s sĂ« programimit Rust 1.96, i cili ishte iniciuar nga projekti Mozilla, por tani po zhvillohet nĂ«n pĂ«rkrahjen e njĂ« organizate tĂ« pavarur jofitimprurĂ«se, Rust Foundation. Gjuha fokusohet nĂ« sigurinĂ« e menaxhimit tĂ« memories dhe ofron mjete pĂ«r tĂ« arritur paralelizĂ«m tĂ« lartĂ« nĂ« ekzekutimin e detyrave, pa pĂ«rdorimin e njĂ« mbledhĂ«si plehrash dhe runtime (runtime pĂ«rbĂ«het vetĂ«m nga inicializimi bazĂ« dhe mbĂ«shtetje e bibliotekĂ«s standarde).
Metodat e punës me memorien në Rust kanë si objektiv të ekskludojnë gabimet gjatë manipulimit të treguesve dhe të mbrojnë nga problemet që lindin për shkak të punës me memorien në nivel të ulët, siç janë qasja në hapësirën e memories pas çlirimit të saj, dereferencimi i treguesve zero, dalja jashtë kufijve të tamponit, etj. Për shpërndarjen e librarive, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të librarive, mbahet repozitori 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:
- ĂshtĂ« shtuar moduli range me implementimin e llojeve tĂ« reja, tĂ« zhvilluara pĂ«r tĂ« zĂ«vendĂ«suar llojet e vjetra Range, RangeInclusive, RangeToInclusive dhe RangeFrom, dhe qĂ« lejojnĂ« ruajtjen e intervaleve nĂ« struktura Copy. Tipi Range pĂ«rcakton intervalet e kufizuara nga vlera minimale dhe maksimale tĂ« lejuara (por qĂ« nuk pĂ«rfshihen), tipi RangeFrom pĂ«rcakton numra qĂ« fillojnĂ« nga njĂ« vlerĂ« e caktuar, dhe tipi RangeInclusive pĂ«rcakton vlerat e intervalit tĂ« caktuar me tĂ« dy kufijtĂ« e tij. NĂ« botimet e ardhshme do tĂ« shtohen gjithashtu lloje tĂ« reja RangeFull dhe RangeTo, realizimi i vjetĂ«r do tĂ« transferohet nĂ« core::range::legacy::*, dhe sintaksa «N..M» do tĂ« kalojĂ« nĂ« versionin e ri tĂ« llojeve.
Tipet e reja dallohen nga fakti se në vend të tipit Iterator implementojnë tipin IntoIterator, dmth, në vend të iterators së integruar përcaktojnë se si të shndërrohet një tip në iterator. Ky qasje lejon përdorimin e operacionit të kopjimit me tipet e reja (tipi Copy, që tregon se vlerat e tipit mund të kopjohen thjesht), e cila më parë ishte e papranueshme për shkak të moskompatibilitetit me tipet me iteratorë të integruar.
Për shembull, tipet e reja japin mundësinë për të ruajtur kufijtë e një prerjeje në një strukturë që kopjohet plotësisht pa ruajtjen e 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 makroët «assert_matches!» dhe «debug_assert_matches!», të cilat kontrollojnë përputhshmërinë e një vlerë me një model të caktuar dhe përfundojnë ekzekutimin në rast të mosmarveshjes. Ndryshe nga shprehjet «assert!(matches!(..))» dhe «debug_assert!(matches!(..))», makroët e reja ofrojnë informacion për debugging me vlerat që shkaktuan dështimin. Për të shmangur përplasje me makro të palëve të treta të dostuara me emra të ngjashëm, makroët e reja kërkojnë importin e drejtpërdrejtë 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Ă« ndaluar kalimi i opsionit tĂ« linkerit «âallow-undefined», i cili lejonte lidhjen e simboleve tĂ« paegzistueshme, qĂ« shndĂ«rroheshin nĂ« import nga moduli «env». NĂ« ndĂ«rtimin pĂ«r WebAssembly, tĂ« gjitha simbolet e lidhura tani pĂ«r çdo rast duhet tĂ« jenĂ« tĂ« pĂ«rcaktuara. PĂ«r tĂ« rikthyer sjelljen e vjetĂ«r, mund tĂ« pĂ«rdorni variablin e mjedisit «RUSTFLAGS=-Clink-arg=âallow-undefined» ose shprehjen â#[link(wasm_import_module = «env»)]â nĂ« kod.
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- assert_matches!
- debug_assert_matches!
- From për AssertUnwindSafe
- From për LazyCell
- From për 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 një dobësi CVE-2026-5223, e cila mund të përdoret për të rishkruar kodin burimor të një paketi tjetër crate në cache-në lokale të paketimeve nga e njëjta repository përmes manipulimeve me lidhjet simbolike brenda crates. Dobësia shfaqet vetëm kur punoni me repository të palëve të treta dhe nuk ndikon në përdoruesit e repository crates.io, pasi në crates.io ndalohet ngarkimi i paketeve me lidhje simbolike.
Gjithashtu mund të theksohet publikimi (PDF) i rezultateve të analizës së përshtatshmërisë së gjuhës Rust për zhvillimin e firmware për mikrocontrolerët dhe sistemet e integruara me burime të kufizuara.
Kërkimi është kryer nga STMicroelectronics me pjesëmarrjen e disa universiteteve evropiane. Dy ekipe të izoluar zhvilluesish u ngarkuan me realizimin e një firmware të njëjtë për mikrocontrolerët STM32U585AI me ndihmën e Arm Cortex-M33. Ekipi i parë krijoi firmware në C, ndërsa i dyti në Rust.
Testimi i punës së përfunduar nuk zbuloi përparësi të dukshme në përdorimin e gjuhës C në krahasim me Rust për zhvillimin e firmware për mikrocontrolerët në krahasim të konsumit të memories dhe performancës. Për më tepër, përdorimi i një runtime sistemi të shkruar në Rust nga projekti i hapur Ariel OS ka lejuar arritjen e një ndjenje të memories më të ulët në projektin në Rust se sa në implementimin në gjuhën C, e cila përdor një stek tradicional për zhvillimin e firmware mbi bazën e bibliotekës newlib.
MadhĂ«sia e firmware-it pĂ«rfundimtar ishte 84100 byte nĂ« projektin Rust dhe 76744 byte nĂ« projektin C (10% mĂ« e vogĂ«l), por konsumi i memorie sĂ« rastit nĂ« firmware-n Rust doli tĂ« ishte ndjeshĂ«m mĂ« i ulĂ«t â 24640 byte pĂ«rballĂ« 42608 byte. Sa i pĂ«rket performancĂ«s, gjatĂ« testimit tĂ« prototipeve fillestare, tĂ« zhvilluar nĂ« 6 javĂ«, implementimi nĂ« Rust ishte dy herĂ« mĂ« i shpejtĂ« se implementimi nĂ« C, por tĂ« dyja realizimet ishin ndjeshĂ«m mĂ« prapa maksimumit tĂ« paracaktuar tĂ« performancĂ«s. Pas 4 javĂ«sh tĂ« dedikuara pĂ«r optimizim, tĂ« dyja realizimet arritĂ«n njĂ« rezultat tĂ« ngjashĂ«m, afĂ«r maksimumit tĂ« paracaktuar.

Burimi: opennet.ru
