On avalikustatud üldotstarbelise programmeerimiskeele Rust 1.65 versioon, mida arendas Mozilla, kuid mille arengut toetab praegu sõltumatu mittetulundusühing Rust Foundation. Keel keskendub mälu ohutule kasutusele ja pakub vahendeid kõrge üheaegse töötluse saavutamiseks, vältides samas prügikorjaja ja runtime'i (runtime piirdub põhialustuse ja standardraamatukogu hooldamisega).
Rustis olevad mäluhaldusmeetodid vabastavad arendajad probleemidest, mis on seotud osutitega, ning kaitsevad madala taseme mälutöötlusest tulenevate probleemide, nagu vabanenud mälu alale juurdepääs, nullosutite de-referentseerimine, mälupiiride ületamine jne. Raamatukogude levitamiseks, projekti koostamise ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.
Rust tagab turvalise mälutöötluse kompilatsiooni ajal, kontrollides viiteid, jälgides objektide omandit, arvestades objektide elutsüklit (nähtavust) ja hinnates mälule juurdepääsu õigsust koodi käitamise ajal. Rust pakub ka meetmeid enamike täisarvude ületamiste vältimiseks, nõuab muutujate väärtuste algväärtustamist enne kasutamist, käsitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade minimeerimiseks.
Põhilised uuendused:
- Lisatud on üldiste seotud tüüpide (GAT, Generic Associated Types) tugi, mis võimaldavad luua tüübinimesid, mis on seotud teise tüübiga, ja siduda tüüpskeemid tüüpide konstruktoritega. trait Foo { type Bar<‘x>; }
- Rakendatud on „let … else” väljend, mis võimaldab kontrollida mustrit vastavust otse „let” väljendis ja täita suvalist koodi, kui muster ei ühti. let Ok(count) = u64::from_str(count_str) else { panic!(„Can’t parse integer: ‘{count_str}'”); };
- Nimetud blokist väljapääsu võimaldamiseks on lubatud kasutada break väljendit, kasutades blokeerimise määratlemiseks bloki nime (silt). let result = ‘block: { do_thing(); if condition_not_met() { break ‘block 1; } do_next_thing(); if condition_not_met() { break ‘block 2; } do_last_thing(); 3 };
- Linuxile on lisatud võimalus eraldi salvestada tõrkeotsingu teavet (split-debuginfo), mis varem oli saadaval ainult macOS platvormil. Kui valikut «-Csplit-debuginfo=unpacked» kasutatakse, salvestatakse DWARF formaadis debuginfo andmed mitmesse eraldi objekti faili, millel on laiend «.dwo». Valiku «-Csplit-debuginfo=packed» kasutamisel luuakse üks pakett formaadis «.dwp», mis sisaldab kogu projekti debuginfo andmeid. Debuginfo integreerimiseks otse .debug_* ELF-objektide sektsiooni võib kasutada valikut «-Csplit-debuginfo=off».
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
- std::backtrace::Backtrace
- Bound::as_ref
- std::io::read_to_string
- ::cast_mut
- ::cast_const
- Märgis «const», mis määratleb kasutuse võimaluse igas kontekstis konstandina, on rakendatud funktsioonides <*const T&>::offset_from ja mut T>::offset_from
- LSP (Language Server Protocol) protokolli rakendamise lõppfaasi käigus on vana Rust Language Server (RLS) implementeeritud rust-analyzer'iga asendatud, kasutades serveri kohakriitikut, mis väljastab hoiatusi soovitusega üle minna rust-analyzer'i kasutamisele.
- Kompileerimise käigus on sisse lülitatud MIRi vaheformaadi inline-laotuse tugi, mis kiirendab tüüpiliste crate-paketide kompileerimist 3–10%.
- Cargo paketihalduris on graafikupõhisel kompaktsusel töötavate ülesannete järjestamine, mis ootele jääb, tagatud.
Lisaks võib märkida intervjuud Rusti keele rakendamisest ettevõttes Volvo autotööstuse infotehnoloogiliste komponente arendades. Juba olemasolevat ja testitud koodi ei plaanita Rusti ümber kirjutada, kuid uue koodi puhul on Rust eelistatud valik kvaliteedi tõstmiseks väiksemate kuludega. Rusti keelekasutusega seotud töörühmad on loodud ka autotööstuse liitudes AUTOSAR (AUTomotive Open System ARchitecture) ja SAE (Society of Automotive Engineers).
Lisaks rääkis Google'i inseneritööstuse asepresident David Kleidermacher Rusti keelde tõlkimisest, mis on kasutusel Androidi platvormi krüptovõtmete haldamiseks, ning Rusti rakendamisest DNS üle HTTPS protokollis, UWB-kiipide (Ultra-Wideband) steigis ja Androidi virtualiseerimise raamistikus, mis on seotud Tensor G2 kiibiga. Androidile arendatakse ka uusi Bluetoothi ja Wi-Fi steike, mis on ümber kirjutatud Rusti keeles. Üldine strateegia seisneb alguses kõige vähem turvaliste ja kriitiliste tarkvarakomponentide ülemises Rustile, et järk-järgult tugevdada kaitset, ja seejärel laiendada seda ka muude seotud alamsüsteemide katvusele. Eelmisel aastal lisati Rust programmeerimiskeelte hulka, mis on lubatud Androidi platvormi arendamiseks.
Allikas: opennet.ru
