Käidatud on välja programmeerimiskeele Rust 1.96 versioon, mille algatas Mozilla projekt, kuid mis on nüüd arendamisel sõltumatu mittetulundusühingu Rust Foundation toetusel. Keel keskendub mälukasutuse ohutusele ja pakub vahendeid ülesannete kõrge täitmise paralleelsuse saavutamiseks, tegemata seda prügikorjaja ja runtime'i (runtime piirdub põhi-initsialiseerimise ja standardteegi hooldamisega) kasutamisega.
Rust'i mälu töötlemise meetodid on suunatud pointerite manipuleerimise vigade vältimisele ja probleemide kaitsmisele, mis tulenevad madala taseme mälu töötlemisest, nagu juurdepääs vabastatud mälupiirkondadele, nullpointerite de-referentseerimine, mälupuhvri ületamine jne. Raamatukogude levitamiseks, ehituste tagamiseks ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude majutamiseks toetatakse repotites crates.io.
Mäluhügieen Rust'is tagatakse kompileerimise ajal viidete kontrollimise, objektide omandi jälgimise, objektide eluaja (vaateala) arvestamise ja mälule juurdepääsu korrektuse hindamise kaudu koodi täitmise ajal. Rust pakub ka vahendeid täisarvude ülevoolude vältimiseks, nõuab muutujate väärtuste kohustuslikku initsialiseerimist enne kasutamist, käsitleb vigu paremini standardraamatukogus, rakendab muutumatuse (immutable) mõistet viidete ja muutujate jaoks vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade vähendamiseks.
Peamised uuendused:
- Lisatud on moodul range, mis реализует новых типов, развиваемых для замены устаревших типов Range, RangeInclusive, RangeToInclusive и RangeFrom, и позволяющих хранить диапазоны в Copy-структурах. Тип Range определяет диапазоны, ограниченные минимальным и максимальным допустимым значением (но не входящим в него), тип RangeFrom определяет числа начиная с указанного значения, а тип RangeInclusive — значения указанного диапазона с обеими его границами. В будущих выпусках дополнительно появятся типы RangeFull и RangeTo, старая реализация будет перенесена в core::range::legacy::*, а синтаксис «N..M» переведут на новый вариант типов.
Uued tüübid erinevad selle poolest, et nad rakendavad IntoIterator tüüpide loomise asemel Iterator tüübi, st nad määratlevad, kuidas tüüp muundada iteratoriks. Selline lähenemine võimaldab uute tüüpide puhul kasutada kopeerimise operaatorit (Copy-tüüp, mis näitab, et tüübi väärtusi saab duplikeerida lihtsa kopeerimise teel), mis oli varem sobimatuse tõttu mitte kättesaadav, kuna see ei ühildu sisseehitatud iteratoritüüpidega.
Näiteks uued tüübid võimaldavad hoida lõike piire struktura, mis kopeeritakse täielikult ilma alg- ja lõppväärtuste eraldi säilitamiseta:kasuta 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, kas väärtus vastab määratud mustrile ja lõpetavad töö hädaolukorra korral. Need makrod erinevad väidetest „assert!(matches!(..))” ja „debug_assert!(matches!(..))” selle poolest, et nad kuvavad vea põhjustanud väärtuste silumisinfot. Kolmandate osapoolte makrodega, millel on sarnased nimed, ristumiste vältimiseks nõuavad uued makrod „core::assert_matches” teegi selget importimist.
kasuta core::assert_matches;
fn get_random_number() -> u32 {
4
}fn main() {
assert_matches!(get_random_number(), 1..=6);
} - WebAssembly'i sihtplatvormiks koostamisel on lõpetatud linkimisse "—allow-undefined" valiku edastamine, mis lubas seondumist, kui olid määramatud sümbolid, mis muudeti impordiks moodulist "env". WebAssembly'i koostamisel peavad kõik linkimisega seotud sümbolid nüüd vaikimisi olema määratletud. Vanade käitumise taastamiseks võib kasutada keskkonnamuutujat "RUSTFLAGS=-Clink-arg=—allow-undefined" või väljendit ‘#[link(wasm_import_module = "env")]’ koodis.
- Uus hulk API-d on viidud stabiilsuse tasemele, sealhulgas on stabiliseeritud meetodid ja tüübispetsiifikatsioonide 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
- Pakettide haldur Cargo on kõrvaldanud haavatavuse CVE-2026-5223, mida saab kasutada kohaliku pakettide vahemälu teise crate-paketi lähtekoodi üle kirjutamiseks, manipuleerides sümboolsete linkidega crate'i pakettides. See haavatavus ilmneb ainult kolmandate osapoolte paketirepositooriatega töötamisel ja ei mõjuta crates.io repositooriumi kasutajaid, kuna crates.io-s on sümboolsete linkidega pakettide üleslaadimine keelatud.
Lisaks tasub märkida, et on avaldatud (PDF) uuringu tulemused, mis käsitlevad Rusti keele sobivust mikrokontrollerite ja ressursipiirangutega integreeritud süsteemide tarkvara arendamiseks.
Uuringu viis läbi ettevõte STMicroelectronics koostöös mitme Euroopa ülikooliga. Kahele isoleeritud arendustiimile anti ülesanne rakendada sama tarkvara mikrokontrolleritele STM32U585AI, millel on Arm Cortex-M33 tuum. Esimene meeskond arendas tarkvara C keeles ja teine Rustis.
Testitud töö ei tuvastanud märkimisväärset eelist C keele kasutamisel Rusti asemel mikrokontrollerite tarkvara arendamisel, võrreldes mälu kasutuse ja jõudlusega. Veelgi enam, Rustis kirjutatud süsteemne runtime, mis tuleneb avatud projekti Ariel OS, võimaldas saavutada Rusti projekti mälukasutuse madalamal tasemel kui C keeles rakenduses, mis kasutas traditsioonilist pakettide arendust, mis põhineb newlib'i raamatukogul.
Tulemuseks olnud püsivara suurus oli Rusti projektis 84100 baiti ja C projektis 76744 baiti (10% vähem), kuid Rusti püsivara mälutarve oli märgatavalt madalam — 24640 baiti võrreldes 42608 baitiga. Mis puudutab jõudlust, siis 6 nädalaga välja töötatud esialgsete prototüüpide testimisel edestas Rusti teostus C teostust kahekordselt, kuid mõlemad teostused jäävad oluliselt alla arvutatud maksimaalsele jõudlusele. Pärast 4 nädalat, mis kulus optimeerimisele, saavutasid mõlemad teostused umbes sama tulemuse, mis oli lähedane arvutatud maksimumile.

Allikas: opennet.ru
