Gjuha e programimit për qëllime të përgjithshme Rust 1.65, e themeluar nga projekti Mozilla, por tani e zhvilluar nën kujdesin e organizatës së pavarur jofitimprurëse Rust Foundation, është publikuar. Gjuha fokusohet në sigurinë e kujtesës dhe siguron mjetet për të arritur paralelizëm të lartë të punës duke shmangur përdorimin e një grumbulluesi të mbeturinave dhe kohën e funksionimit (koha e funksionimit reduktohet në inicializimin bazë dhe mirëmbajtjen e bibliotekës standarde).
Metodat e trajtimit të memories Rust e ruajnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin për shkak të trajtimit të nivelit të ulët të kujtesës, të tilla si qasja në një zonë memorie pasi të jetë liruar, mosreferencimi i treguesve null, tejkalimet e buferit, etj. Për të shpërndarë bibliotekat, për të ofruar ndërtime dhe për të menaxhuar varësitë, projekti zhvillon menaxherin e paketave Cargo. Depoja e crates.io mbështetet për pritjen e bibliotekave.
Siguria e memories sigurohet në Rust në kohën e përpilimit përmes kontrollit të referencës, mbajtjes së gjurmës së pronësisë së objektit, mbajtjes së gjurmëve të jetëgjatësisë së objektit (scopes) dhe vlerësimit të saktësisë së aksesit në kujtesë gjatë ekzekutimit të kodit. Rust siguron gjithashtu mbrojtje kundër tejmbushjeve të numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave përpara përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshme si parazgjedhje, ofron shtypje të fortë statike për të minimizuar gabimet logjike.
Risitë kryesore:
- Mbështetje e shtuar për llojet e lidhura gjenerike (GAT, Generic Associated Types), të cilat bëjnë të mundur krijimin e pseudonimeve të tipit të lidhur me një lloj tjetër dhe ju lejojnë të lidhni konstruktorët e tipit me tipare. tipar Foo { type Bar<'x>; }
- Shprehja "le ... else" është zbatuar, duke ju lejuar të kontrolloni gjendjen e përputhjes së modelit direkt brenda shprehjes "le" dhe të ekzekutoni kodin arbitrar nëse modeli nuk përputhet. le Ok(count) = u64::from_str(count_str) else { panik!("Nuk mund të analizohet numri i plotë: '{count_str}'"); };
- Lejoni përdorimin e një deklarate pushimi për të dalë para kohe nga blloqet e emërtuara, duke përdorur emrin e bllokut (etiketën) për të identifikuar bllokun që do të përfundojë. let result = 'blloko: {do_thing(); if condition_not_met() { break 'block 1; } bëj_gjënë_tjetër(); if condition_not_met() { break 'block 2; } bëj_gjënë_e fundit(); 3 };
- Për Linux, është shtuar aftësia për të ruajtur veçmas informacionin e korrigjimit (split-debuginfo), i disponueshëm më parë vetëm për platformën macOS. Kur specifikoni opsionin "-Csplit-debuginfo=unpacked", të dhënat e korrigjimit të informacionit në formatin DWARF do të ruhen në disa skedarë objektesh të veçantë me një shtesë ".dwo". Specifikimi i "-Csplit-debuginfo=packed" do të krijojë një paketë të vetme në formatin ".dwp" që përfshin të gjitha të dhënat e korrigjimit të gabimeve për projektin. Për të integruar debuginfo direkt në seksionin .debug_* të objekteve ELF, mund të përdorni opsionin "-Csplit-debuginfo=off".
- Një pjesë e re e API-së është zhvendosur në kategorinë e qëndrueshme, duke përfshirë metodat dhe implementimet e tipareve janë stabilizuar:
- std::backtrace::Backtrace
- Lidhur::as_ref
- std::io::read_to_string
- <*const T>::cast_mut
- <*mut T>::cast_const
- Atributi "const", i cili përcakton mundësinë e përdorimit të tij në çdo kontekst në vend të konstanteve, përdoret në funksionet <*const T&>::offset_from dhe <*mut T>::offset_from
- Si pjesë e fazës përfundimtare të transferimit të zbatimit të protokollit LSP (Protokolli i Serverit të Gjuhës) në analizuesin e ndryshkut, zbatimi i vjetëruar i Serverit të gjuhës Rust (RLS) u zëvendësua me një server cung që lëshon një paralajmërim me një sugjerim për të kaluar në duke përdorur analizuesin e ndryshkut.
- Gjatë përpilimit, aktivizohet mbështetja për vendosjen inline të kodit të ndërmjetëm MIR, i cili përshpejton përpilimin e paketave tipike të arkës me 3-10%.
- Për të shpejtuar ndërtimet e planifikuara, menaxheri i paketave Cargo ofron renditjen e punëve që presin ekzekutimin në radhë.
Për më tepër, mund të vini re intervistën në lidhje me përdorimin e gjuhës Rust në Volvo për të zhvilluar komponentë të sistemeve të informacionit të automobilave. Nuk ka plane për të rishkruar kodin ekzistues dhe të testuar në Rust, por për kodin e ri, Rust është një nga opsionet e preferuara për përmirësimin e cilësisë me kosto më të ulëta. Grupet e punës në lidhje me përdorimin e gjuhës Rust janë krijuar gjithashtu në shoqatat e automobilave AUTOSAR (AUTomotive Open System ARchitecture) dhe SAE (Society of Automotive Engineers).
Përveç kësaj, David Kleidermacher, nënkryetari i inxhinierisë së Google, foli për përkthimin e kodit të përdorur në platformën Android për të menaxhuar çelësat e enkriptimit në Rust, si dhe përdorimin e Rust në zbatimin e protokollit DNS mbi HTTPS në stack. për çipat UWB- (Ultra-Wideband) dhe në kornizën e virtualizimit (Android Virtualization Framework) të lidhur me çipin Tensor G2. Rafte të reja për Bluetooth dhe Wi-Fi, të rishkruara në Rust, po zhvillohen gjithashtu për Android. Strategjia e përgjithshme është që gradualisht të forcohet siguria, së pari duke i konvertuar komponentët më të cenueshëm dhe jetik të softuerit në Rust, dhe më pas duke u zgjeruar në nënsisteme të tjera të lidhura. Vitin e kaluar, gjuha Rust u përfshi në listën e gjuhëve të lejuara për zhvillimin e platformës Android.
Burimi: opennet.ru
