Avaldatud on üldotstarbelise programmeerimiskeele Rust 1.79 väljaanne, mis põhineb Mozilla projektist, kuid mida arendab nüüd sõltumatu mittetulundusühing Rust Foundation. Keel keskendub mäluga ohutule tööle ja pakub vahendeid ülesannete kõrge paralleelsuse saavutamiseks, ilma et oleks vaja prügi kogujaid ja jooksutamisnumbrit (runtime piirdub algettevalmistusega 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:
- On lisatud inline-konstandi tugi, mida saab otse koodis märkida 'const { … }' plokkide abil, mida töödeldakse konstandite kontekstis ja mis võimaldavad teha ilma eraldiseisva konstandi määratlemiseta. 'const { … }' plokis määratud kood arvutatakse kompileerimise ajal ja seda kasutatakse konstandina, ilma et programm selle käigus täidetaks. Erinevalt konstandite määratlemisest väljendiga 'const ITEM: … = …', ei ole 'const { … }' plokkides vajalik tüübi näitamine, kuna nendes toetatakse automaatset tüübi tuvastamist. Näiteks kood eraldi määra konstandiga
const EMPTY: Option<Vec> = None;
let foo = [EMPTY; 100];võib asendada otse kasutamisega:
let foo = [const { None }; 100];
- Süntaks «T: Trait» stabiliseeritud, et määrata piirangud assotsiatiivsetes tüüpides, võimaldades lühendada sisemiste piirangute määratlemise väljendeid, mis varem nõudsid sisemist impl Trait või mitmeid tingimusi «where».
- Automaatne ajavahemike pikendamine ajutiste väärtuste puhul, mida kasutatakse «match» ja «if» konstruktsioonides, on tagatud.
let a = if true {
..;
&temp() // aeg pikeneb
} else {
..;
&temp() // aeg pikeneb
}; - Stabiliseeritud funktsiooni main importimise võimalus teistelt moodulitelt ja crate-paketilt.
- Standardsest teegist kogumise ajal kasutusel lipp «-Cforce-frame-pointers=yes», mis lisab andmeid steki rekonstrueerimiseks programmide profiilimise ajal.
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
- {integer}::unchecked_add
- {integer}::unchecked_mul
- {integer}::unchecked_sub
- ::split_at_unchecked
- ::split_at_mut_unchecked
- ::utf8_chunks
- str::Utf8Chunks
- str::Utf8Chunk
- ::is_aligned
- ::is_aligned
- NonNull::is_aligned
- ::len
- ::len
- ::is_empty
- ::is_empty
- NonNull::::is_empty
- CStr::count_bytes
- io::Error::downcast
- num::NonZero
- path::absolute
- proc_macro::Literal::byte_character
- proc_macro::Literal::c_string
- Konstantse märgendiga `const`, mis määrab võimaluse kasutada konstandina igas kontekstis, on rakendatud funktsioonides:
- Atomic*::into_inner
- io::Cursor::new
- io::Cursor::get_ref
- io::Cursor::position
- io::empty
- io::repeat
- io::sink
- panic::Location::caller
- panic::Location::file
- panic::Location::line
- panic::Location::column
- Stabiliseeritud
osad võimalustest, mida saab kasutada Webassembly (WASM) vaheformaati kompileerimisel. - Kolmandat toetust on rakendatud aarch64-apple-visionos, aarch64-apple-visionos-sim ja riscv32ima-unknown-none-elf platvormidele. Kolmas tase eeldab põhitoetust, kuid ilma automatiseeritud testimise, ametlike väljundite avaldamise ja koodi kompileerimise kontrollimise võimaluseta.
- Teist taset toetust on rakendatud sihtplatvormidele aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm ja x86_64-pc-windows-gnullvm. Teine tase eeldab kompileerimise garanteerimist.
Samuti kuulutas Rust Foundation, mis juhib Rusti keele ökosüsteemi, välja 'Safety-Critical Rust Consortium' - konsortsiumi, mille eesmärk on kasutada Rusti keelt lahendustes, mis nõuavad kõrget usaldusväärsust (Safety-Critical Software), milles rike võib ohustada inimeste elu, kahjustada keskkonda või põhjustada tõsiseid seadme kahjustusi. Konsortsiumiga liitusid sellised ettevõtted nagu ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle ja Woven by Toyota. Konsortsiumi ülesannete hulka kuulub juhendite kirjutamine ning raamatukogude, linterside ja staatiliste analizaatide väljatöötamine, samuti usaldusväärsuse formaalse verifikatsiooni meetodite rakendamine ja keele alameetodite arendamine kõrge usaldusväärsusega süsteemide jaoks.
Kõrge usaldusväärsusega süsteemidega seotud projektide seas võib välja tuua Verus - tööriista, mis kontrollib Rusti keeles kirjutatud koodi korrektsust. Kontroll toimub, määratledes spetsifikatsiooni, mis kirjeldab koodi lubatud käitumist. Käituvate koodide käigus Verus kontrollib spetsifikatsiooni vastavust, et kinnitada töö korrektust.
Allikas: opennet.ru
