Rust 1.96 vÀljaanne. Rusti sobivuse hindamine mikrokontrollerite vahelise tarkvara loomisel

Programmeerimiskeele Rust 1.96 vĂ€ljaanne on avaldatud, mille on algatanud Mozilla projekt, kuid mida arendatakse praegu iseseisva mittetulundusĂŒhingu Rust Foundationi toetusel. Keel keskendub mĂ€luhalduse ohutusele ja pakub vahendeid kĂ”rge töötlusparalleelsuse saavutamiseks, samas vĂ€ltides prĂŒgikoristajat ja jooksukeskkonda (runtime piirdub pĂ”hialustamise ja standardraamatukogu hooldamisega).

Rustis mĂ€luga töötamise meetodid on suunatud vigade vĂ€ltimisele pointer'itega manööverdamisel ja probleemide kaitsmisele madala taseme mĂ€lutöötlusest, nagu mĂ€lupiirkonna kasutamine pĂ€rast selle vabastamist, nullpunktide de-referentsimine, mĂ€lupiiri ĂŒletamine jne. Raamatukogude levitamiseks, ehituse tagamiseks 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 range-modul, mis rakendab uusi tĂŒĂŒpe, mida arendatakse vananenud tĂŒĂŒpide Range, RangeInclusive, RangeToInclusive ja RangeFrom asendamiseks ning mis vĂ”imaldavad salvestada vahemikke Copy-struktuurides. TĂŒĂŒp Range mÀÀratleb vahemikud, mis on piiratud minimaalsete ja maksimaalsete lubatud vÀÀrtustega (kuid need ei kuulu vahemikku), tĂŒĂŒp RangeFrom mÀÀratleb numbrid, mis algavad antud vÀÀrtusest, ja tĂŒĂŒp RangeInclusive - antud vahemiku vÀÀrtused koos mĂ”lema piiri vÀÀrtustega. Tulevastes vĂ€ljaannetes lisanduvad veel tĂŒĂŒpide RangeFull ja RangeTo, samas kui vana rakendus kantakse ĂŒle core::range::legacy::* ja sĂŒntaks „N..M“ tĂ”lgitakse uute tĂŒĂŒpide variandiks.

    Uued tĂŒĂŒbid erinevad sellest, et nende asemel, et rakendada Iterator tĂŒĂŒpe, rakendavad nad IntoIterator tĂŒĂŒpi, st nad mÀÀratlevad, kuidas tĂŒĂŒpi iteratsiooniks muuta, mitte ei kasuta sisseehitatud iteratoreid. Selline lĂ€henemine vĂ”imaldab uute tĂŒĂŒpidega kasutada kopeerimise toimingut (tĂŒĂŒp Copy, mis nĂ€itab, et tĂŒĂŒbi vÀÀrtusi saab dubleerida lihtsa kopeerimise kaudu), mis varem ei olnud vĂ”imalik sisseehitatud iteratoritega tĂŒĂŒpide ĂŒhilduvuse puudumise tĂ”ttu.
    NĂ€iteks uued tĂŒĂŒbid vĂ”imaldavad sĂ€ilitada lĂ”ikepiire struktuuris, mis kopeeritakse tĂ€ielikult ilma algsete ja lĂ”ppvÀÀrtuste eraldi salvestamiseta:

    use core::range::Range;

    #[derive(Clone, Copy)]
    pub struct Span(Range);

    impl Span {
    pub fn of(self, s: &str) -> &str {
    &s[self.0]
    }
    }

  • Lisatud on makrod „assert_matches!“ ja „debug_assert_matches!“, mis kontrollivad vÀÀrtuse vastavust mÀÀratud mustrile ja lĂ”petavad kĂ€itamise avariiliselt, kui need ei vasta. Erinevalt „assert!(matches!(..))“ ja „debug_assert!(matches!(..))“ avaldustest, annavad uued makrod vea korral debug-infot vÀÀrtuste kohta, mis pĂ”hjustasid tĂ”rke. Kolmandate osapoolte sama nimega makrodega ristumiste vĂ€ltimiseks nĂ”uavad uued makrod pĂ”hiteegi „core::assert_matches“ selget importimist.

    use core::assert_matches;

    fn get_random_number() -> u32 {
    4
    }

    fn main() {
    assert_matches!(get_random_number(), 1..=6);
    }

  • WebAssembly'i sihtplatvormi ehitamisel on lĂ”petatud valiku „—allow-undefined” edastamine linkerile, mis lubas lingimist olemasolevate mÀÀratlemata sĂŒmbolitega, mis muudeti „env” mooduli impordiks. WebAssembly'i jaoks ehitamisel peavad kĂ”ik linkimisega seotud sĂŒmbolid nĂŒĂŒd vaikimisi olema mÀÀratletud. Varasema kĂ€itumise taastamiseks saab kasutada keskkonnamuutujat „RUSTFLAGS=-Clink-arg=—allow-undefined” vĂ”i avaldust ‘#[link(wasm_import_module = „env”)]’ koodis.
  • Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒpide rakendused:
    • 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
  • Cargo pakettihalduris on kĂ”rvaldatud haavatavus CVE-2026-5223, mis vĂ”imaldab teise crate-paketi allika koodi ĂŒlekirjutamist kohalikus pakettide vahemikus sama hoidla kaudu sĂŒmboolsete linkide manipuleerimise kaudu crate-pakettides. Haavatavus avaldub ainult kolmandate osapoolte paketihoiustel ja ei mĂ”juta crates.io hoidla kasutajaid, kuna crates.io-s on sĂŒmboolsete linkide ĂŒleslaadimine keelatud.

TĂ€iendavalt tasub mĂ€rkida, et on avaldatud (PDF) analĂŒĂŒs, mis kĂ€sitleb Rusti keele sobivust mikrokontrollerite ja ressursipiiranguga sisseehitatud sĂŒsteemide kindlate firmware'ide arendamiseks.
Uuringu viis lĂ€bi ettevĂ”te STMicroelectronics mitmete Euroopa ĂŒlikoolide osalusel. Kahele isoleeritud arendustiimile anti ĂŒlesanne rakendada sama firmware mikrokontrolleritele STM32U585AI, mille tuum on Arm Cortex-M33. Esimene meeskond töötas vĂ€lja firmware C keeles, teine aga Rustis.

Tehtud töö testimine ei tuvastanud mĂ€rgatavaid eeliseid C keele kasutamisel vĂ”rreldes Rustiga mikrokontrollerite jaoks firmware'ide arendamisel, vĂ”rreldes mĂ€lu tarbimise ja jĂ”udlusega. Veelgi enam, Rustis kirjutatud sĂŒsteemi runtime'i kasutamine avatud projekti Ariel OS raames vĂ”imaldas saavutada Rusti projekti mĂ€lu tarbimist madalamana kui C keeles rakenduses, mis kasutas traditsioonilist stĂ€ki newlib raamatukogul pĂ”hineva firmware'i arendamiseks.

LĂ”ppfirmware'i suurus Rusti projektis oli 84100 baiti ja C projektis 76744 baiti (10% vĂ€hem), kuid Rusti firmware'i mĂ€lutarbimine osutus oluliselt madalamaks - 24640 baiti vĂ”rreldes 42608 baitiga. JĂ”udluse osas, algprototĂŒĂŒpide testimisel, mis loodi 6 nĂ€dalaga, ĂŒletas Rusti rakendus kaks korda C rakenduse, kuid mĂ”lemad rakendused jĂ€id oluliselt alla arvutatud maksimaalsest jĂ”udlusest. PĂ€rast 4 nĂ€dalat, mis oli pĂŒhendatud optimeerimisele, saavutasid mĂ”lemad rakendused ligikaudu sama tulemuse, mis oli lĂ€hedane arvutatud maksimumile.



Allikas: opennet.ru
Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster