Avaldatud on ĂŒldotstarbelise programmeerimiskeele Rust 1.82 versioon, mille on loonud Mozilla, kuid mis on nĂŒĂŒd arendatud sĂ”ltumatu mittetulundusĂŒhingu Rust Foundation all. Keel keskendub mĂ€luga ohutule töötamisele ja pakub liideseid, et saavutada kĂ”rge paralleelsus ĂŒlesannete tĂ€itmisel, samal ajal vĂ€ltides prĂŒgikoristajat ja runtime'i (runtime koosneb ainult pĂ”hi-initsialiseerimisest ja standardraamatukogu toetamisest).
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:
- Paketihaldurisse cargo on lisatud kĂ€sk âinfoâ, mis prindib teavet paketi kohta reposs.
- Lisatud on toetust sĂŒntaksile âuseâ âimpl Traitâ keeles, mis mÀÀratleb teavet varjatud tĂŒĂŒpide kohta. NĂ€iteks âimpl Trait + useâ nĂ€itab, et varjatavas tĂŒĂŒbiks on lubatud kasutada vaid parameetreid âxâ ja âTâ.
- Pakutakse eraldi sĂŒntaks raw-viidete loomise jaoks, mis asendab varem kasutatud makrosid: makro âaddr_of!(expr)â on asendatud operaatoriga â&raw const exprâ, ja makro âaddr_of_mut!(expr)â on asendatud operaatoriga â&raw mut exprâ. struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82 }; // Vanar stiil raw-viidete loomise jaoks let ptr = std::ptr::addr_of!(p.not_aligned_field); // Uus stiil raw-viidete loomise jaoks let ptr = &raw const p.not_aligned_field; let val = unsafe { ptr.read_unaligned() }; }
- Selle kaudu on vĂ”imalik mÀÀratleda ohutud funktsioonid ja konstantid, mille eluiga on 'static', extern-blokkides, kus on âunsafeâ mĂ€rge (varem vĂ”isid kĂ”ik elemendid âunsafe externâ sisaldada ainult âunsafeâ mĂ€rget): unsafe extern { pub safe static TAU: f64; pub safe fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
- MĂ€rgid no_mangle, link_section ja export_name, mis vĂ”ivad pĂ”hjustada mÀÀramatut kĂ€itumist, loetakse nĂŒĂŒd ohtlikuks ja nĂ”uavad selget mĂ€rki âunsafeâ, nĂ€iteks: #[unsafe(no_mangle)] pub fn my_global_function() { }
- MusterjĂ€rjendusel on lubatud vahele jĂ€tta tĂŒhjad tĂŒĂŒbid, nagu âenum Void {}â vĂ”i struktuurid, millel on nĂ€htav tĂŒhi vĂ€li. use std::convert::Infallible; pub fn unwrap_without_panic(x: Result) -> T { let Ok(x) = x; // âErrâ vĂ”ib vahele jĂ€tta x }
- Kaudsete numbrite tĂŒĂŒpide (f32 ja f64) puhul on standardiseeritud kĂ€itumine mittearvuliste vÀÀrtuste NaN (0.0/0.0) töötlemisel, samuti on lubatud ujuva koma operatsioonide kasutamine const fn-is.
- Assempleris on vĂ”imalik kasutada operandaid, millel on âconstâ mĂ€rk, et otse kasutada tĂ€isarvulisi vÀÀrtusi ilma nende eelneva salvestamiseta registrisse. const MSG: &str = "Hello, world!\n"; unsafe { core::arch::asm!( "mov rdx, {LEN} // luuakse kĂ€sk 'mov rdx, 14'", LEN = const MSG.len(), ⊠); }
- Lubatud on vĂ€ljendite adresseerimine, millel on âstaticâ mĂ€rk, ohutuskontekstis ilma unsafe ploki mÀÀratlemiseta (operaatorid â&raw mutâ ja â&raw constâ ei mĂ”juta operandide vÀÀrtust ning loovad ainult viite): static mut STATIC_MUT: Type = Type::new(); extern âCâ { static EXTERN_STATIC: Type; } fn main() { let static_mut_ptr = &raw mut STATIC_MUT; let extern_static_ptr = &raw const EXTERN_STATIC; }
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒpide rakendused:
- std::thread::Builder::spawn_unchecked
- std::str::CharIndices::offset
- std::option::Option::is_none_or
- [T]::is_sorted
- [T]::is_sorted_by
- [T]::is_sorted_by_key
- Iterator::is_sorted
- Iterator::is_sorted_by
- Iterator::is_sorted_by_key
- std::future::Ready::into_inner
- std::iter::repeat_n
- impl DoubleEndedIterator for Take
Allikas: opennet.ru
