VĂ€lja on antud sĂŒsteemikeele Rust 1.53, mida on arendanud Mozilla ja mida nĂŒĂŒd arendab sĂ”ltumatu mittetulundusĂŒhing Rust Foundation. Keel keskendub mĂ€lus ohutule tööle, tagab automaatse mĂ€luhalduse ja pakub vahendeid ĂŒlesannete kĂ”rge paralleelsuse saavutamiseks, ilma jÀÀdes samas prĂŒgikoguja ja runtime'i kasutamisest (runtime on piiratud pĂ”hialustuse ja standardbiblioteegi hooldusega).
Rustis tagab automaatne mĂ€luhaldus arendajale vigu, mis on seotud pointerite manipulatsiooniga, ja kaitseb mĂ€luhalduse madala taseme tööga seotud probleemide, nĂ€iteks mĂ€lust vabastamise jĂ€rel mĂ€lupiirkonna juurde pÀÀsemise, null-poodide lahti harutamise ja puhverpiiridest ĂŒleastumise eest. Teekide levitamiseks, kogumiseks ja sĂ”ltuvuste haldamiseks arendatakse pakettide haldurit Cargo. Teekide majutamiseks toetatakse registrit crates.io.
Peamised uuendused:
- Massiivide jaoks on vÀlja töötatud IntoIterator iha, mis vÔimaldab massiivi elementide iteratsiooni vÀÀrtuste kaudu: for i in [1, 2, 3] { .. }
Samuti on vÔimalik edastada massiive meetoditesse, mis vÔtavad vastu iteratoreid, nÀiteks: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }
Varem oli IntoIterator rakendatud ainult massiivide viidetele, st vÀÀrtuste iteratsiooniks tuli kasutada viiteid (â&[1, 2, 3]â) vĂ”i â[1, 2, 3].iter()â. IntoIterator rakenduse probleemid massiivide jaoks olid tingitud varasemaid muudatusi lĂ”petava tĂ”lke muutmisest ĐŒĐ”ŃĐŸĐŽarray.into_iter() kujul (&array).into_iter(). Need probleemid suudeti lahendada ringteed mööda â kompilaator jĂ€tkab array.into_iter() tĂ”lgendamist kujul (&array).into_iter(), nagu oleks IntoIterator rakendus puudulik, kuid ainult meetodi kutsumise korral, kasutades sĂŒntaksit â.into_iter()â ning see ei mĂ”juta kutseid kujul âin [1, 2, 3]â, âiter.zip([1, 2, 3])â, âIntoIterator::into_iter([1, 2, 3])â.
- On antud vĂ”imalus kasutada vĂ€ljendeid â|â (loogiline OR tehe) mis tahes ĆĄablooni osas, nĂ€iteks «Some(1) | Some(2)» asemel vĂ”ib nĂŒĂŒd kirjutada «Some(1 | 2)»: match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
- Erinevate mitte-ASCII sĂŒmbolite kasutamine identifitseerijates on lubatud, sealhulgas kĂ”iki rahvuslikke sĂŒmboleid, mis on mÀÀratletud Unicode UAX 31 spetsifikatsioonis, vĂ€lja arvatud emojid. Kui kasutatakse erinevaid, kuid vĂ€limuselt sarnaseid sĂŒmboleid, vĂ€ljastab kompilaator hoiatuse. const BLĂ HAJ: &str = «đŠÂ»; struct äșș { ćć: String, } let α = 1; let ïœos = 2; warning: identifier pair considered confusable between âïœâ and âsâ
- Uue API stabiilne partii on ametlikult vÀlja antud, sealhulgas on stabiliseeritud:
- array::from_ref
- array::from_mut
- AtomicBool::fetch_update
- AtomicPtr::fetch_update
- BTreeSet::retain
- BTreeMap::retain
- BufReader::seek_relative
- cmp::min_by
- cmp::min_by_key
- cmp::max_by
- cmp::max_by_key
- DebugStruct::finish_non_exhaustive
- Duration::ZERO
- Duration::MAX
- Duration::is_zero
- Duration::saturating_add
- Duration::saturating_sub
- Duration::saturating_mul
- f32::is_subnormal
- f64::is_subnormal
- IntoIterator arrayde jaoks
- {integer}::BITS
- io::Error::Unsupported
- NonZero*::leading_zeros
- NonZero*::trailing_zeros
- Option::insert
- Ordering::is_eq
- Ordering::is_ne
- Ordering::is_lt
- Ordering::is_gt
- Ordering::is_le
- Ordering::is_ge
- OsStr::make_ascii_lowercase
- OsStr::make_ascii_uppercase
- OsStr::to_ascii_lowercase
- OsStr::to_ascii_uppercase
- OsStr::is_ascii
- OsStr::eq_ignore_ascii_case
- Peekable::peek_mut
- Rc::increment_strong_count
- Rc::decrement_strong_count
- slice::IterMut::as_slice
- AsRef<[T]> slice::IterMut jaoks
- impl SliceIndex (Bound<usize>, Bound<usize>) jaoks
- Vec::extend_from_within
- Wasm64-unknown-unknown platvormil on rakendatud kolmanda taseme tugi. Kolmas tase tÀhendab pÔhilist tuge, kuid ilma automatiseeritud testimise, ametlike kogude avaldamise ja koodi kompileerimise kontrollimiseta.
- Pakettide haldur Cargo on vaikimisi muudetud kasutama nime "main" Git-repo pÔhiharu (HEAD) jaoks. Asetuste juures pole enam vajalik mÀÀrata branch = «main» sÔltuvuste jaoks, mis on paigutatud repodes, mis kasutavad nime main asemel master.
- Kompilaatoris on minimi LLVM versiooni nÔuded tÔstetud LLVM 10 juurde.
Lisaks tasub mÀrkida, et on tagatud rahastus Linuxi tuuma integreerimise arendamise toetamiseks Rust keeles koostatud komponentide jaoks. Töö toimub Prossimo projekti raames ISRG (Internet Security Research Group) organisatsiooni juhendamisel, kes on Let's Encrypt projekti asutaja ja edendab HTTPS-i ning arendab tehnoloogiaid, et suurendada interneti turvalisust. Rahastamise tagab Google, kes katab Miguel Oheda (Miguel Ojeda) töö, kes on Rust-for-Linux projekti autor. Varem on ISRG ja Google rahastanud alternatiivse HTTP tagapinna loomist curl utiliidi jaoks ja uue TLS mooduli arendamist Apache http-serveri jaoks.
Microsofti ja Google'i andmetel pĂ”hjustab umbes 70% haavatavustest mĂ€lu ebaĂ”ige kasutamine. Eeldatakse, et Rusti programmeerimiskeele kasutamine tuumakomponentide, nĂ€iteks seadme draiverite, arendamisel vĂ€hendab mĂ€lu ebaĂ”ige kasutamise tĂ”ttu tekkivate haavatavuste riski ning vĂ€listab selliste vigade, nagu mĂ€luruumi vabastamise jĂ€rel mĂ€luaadressiga ĂŒhenduse loomine ja puhvri piirest vĂ€ljumine, tekkimise.
Rust tagab mĂ€luga ohutu töö kompileerimise ajal viidete kontrollimise, objektide omandi jĂ€lgimise ja objektide eluea (nĂ€htavuse) arvestamise kaudu ning hindab koodi kĂ€ivitamise ajal mĂ€lule juurdepÀÀsu Ă”igust. Rust pakub ka vahendeid tĂ€isarvude ĂŒletĂ€itumise kaitsmiseks, nĂ”uab muutuja vÀÀrtuste kohustuslikku algvÀÀrtustamist enne kasutamist, kĂ€sitleb vigu paremini standardraamatukogus, rakendab muutujaid ja viiteid vaikimisi muutumatuks (immutable) ning pakub tugevat staatilist tĂŒĂŒbi mÀÀramist loogiliste vigade vĂ€hendamiseks.
Allikas: opennet.ru
