VĂ€lja on vĂ€lja antud Rust 1.53 sĂŒsteemiprogrammeerimiskeel, mille töötas vĂ€lja Mozilla projekt, kuid mille arendust toetab praegu sĂ”ltumatu mittetulundusĂŒhing Rust Foundation. Keel keskendub mĂ€lu turvalisele haldamisele, tagab automaatse mĂ€lu haldamise ja pakub vahendeid kĂ”rge tĂ€itmise paralleelsuse saavutamiseks, vĂ€ltides samas prĂŒgikoristaja ja runtime kasutamist (runtime piirdub pĂ”hialustusega ning standardraamatukogu toetamisega).
Rustis tagab automaatne mĂ€lu haldus arendajale kaitse, vabastades ta erinevate nĂ€idikute kĂ€sitlemise vigadest ja kaitstes mĂ€luga madalat tööd tehes tekkivate probleemide eest, nagu juurdepÀÀs vabastatud mĂ€lu alale, nullviidete lahtimuukimine, puutumatuse ĂŒletamine jne. Raamatukogude jagamiseks, ehitamise tagamiseks ja sĂ”ltuvuste haldamiseks arendatakse pakihaldur Cargo. Raamatukogude majutamiseks toetatakse reposiiti crates.io.
PÔhilised uuendused:
- Massiivide jaoks on rakendatud IntoIterator tĂŒĂŒp, mis vĂ”imaldab korraldada massiivi elementide iteratsiooni vÀÀrtuste jĂ€rgi: for i in [1, 2, 3] { .. }
Samuti on vÔimalik edastada massiive meetoditele, mis vÔtavad vastu iteratoore, 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 massiivi viidetele, st vÀÀrtuste iteratsiooniks tuli kasutada viiteid ("&[1, 2, 3]") vĂ”i "[1, 2, 3].iter()". Massiivide jaoks mĂ”eldud IntoIterator rakendused tĂ”id kaasa ĂŒhilduvuse probleeme, mis olid pĂ”hjustatud varem kompilaatorisse lisatud meetodi array.into_iter() teisendamisest (&array).into_iter(). Need probleemid suudeti lahendada ringtee kaudu â kompilaator jĂ€tkab array.into_iter() teisendamist (&array).into_iter(), nagu oleks IntoIterator tĂŒĂŒbide rakendamine puudunud, kuid ainult juhul, kui meetodit kutsutakse sĂŒntaksiga ".into_iter()" ja mitte sellistes kutsetes nagu "in [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3])".
- On vÔimaldatud kasutada vÀljendeid "|" (loogiline OR) mis tahes ƥablooni osas, nÀiteks ei pea enam kirjutama "Some(1) | Some(2)", vaid vÔib kirjutada "Some(1 | 2)": match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
- Tuvastatud on mitte-ASCII symbolide kasutamine tuvastusnumbrites, sealhulgas kĂ”ik rahvussĂŒmbolid, mis on mÀÀratud Unicode UAX 31 spetsifikatsioonis, vĂ€lja arvatud emoji sĂŒmbolid. Erinevate, kuid sarnaste kirjutisviisidega sĂŒmbolite kasutamisel genereerib kompilaator hoiatuse. const BLĂ HAJ: &str = «đŠÂ»; struct äșș { ćć: String, } let α = 1; let ïœos = 2; warning: identifier pair considered confusable between âïœâ and âsâ
- Stabiilsetesse versioonidesse on kantud uus hulk API-sid, 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
- {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 slice::IterMut jaoks
- impl SliceIndex (Bound, Bound) jaoks
- Vec::extend_from_within
- Kolmas tugi tasand on rakendatud wasm64-unknown-unknown platvormile. Kolmas tugi pakub pÔhitoetust, kuid ilma automatiseeritud testimise, ametlike kogude avaldamise ja koodi koostamise vÔimaluse kontrollita.
- Pakettide halduri Cargo vaikimisi nimi on nĂŒĂŒd «main» Git-repositoorset pĂ”hiharuks (HEAD). RepositooriĂ€ris, mis kasutab nime main asemel master, ei ole enam vaja seadistustes mĂ€rkida branch = «main».
- Kompilaatori minimaalne LLVM versiooninÔue on tÔstetud LLVM 10-le.
Lisaks vĂ”ib mĂ€rkida Linuxi tuuma integreerimise arendustööde rahastamist Rusti arendusk komponentide loomiseks. Töö toimub Prossimo projekti raames, mida juhib ISRG (Internet Security Research Group), mille asutajaks on Letâs Encrypt projekt ning mis toetab HTTPS-i edendamist ja tehnoloogiate arendamist interneti turvalisuse tĂ”stmiseks. Rahastamine tuleb Google'ilt, kes katab Miguel Ojedana (Rust-for-Linux projekti autor) töö. Varasemalt on ISRG ja Google juba rahastanud alternatiivse HTTP-tagakĂŒlje loomist curl utiliidile ning uue TLS-mooduli arendamist Apache http-serverile.
Microsofti ja Google'i andmetel on umbes 70% turvavigadest tingitud mÀlu ebaturvalisest kasutamisest. Eeldatakse, et Rusti keele kasutamine tuuma komponentide, nÀiteks seadme draiverite, arendamiseks aitab vÀhendada mÀlu ebaturvalise töötlemisega seotud haavatavuste riski ning vÀlistada sellised vead nagu mÀlu vabastamise jÀrel sellele juurdepÀÀs ja puhverpiiride rikku mine.
Rust tagab mĂ€lutöö turvalisust kompileerimise ajal viidatud linkide kontrollimise, objektide omaniku jĂ€lgimise ja objektide eluea arvestamise (nĂ€htavuse) kaudu, samuti pĂ€rast koodi kĂ€itamise ajal mĂ€lu juurdepÀÀsu Ă”igsuse hindamise kaudu. Rust pakub ka vahendeid tĂ€isarvude ĂŒlevoolude eest kaitsmiseks, nĂ”uab muutuja vÀÀrtuste kohustuslikku initsialiseerimist enne kasutamist, haldab vigu paremini standardraamatukogus, rakendab muutumatuse (immutable) kontseptsiooni linkide ja muutujate puhul vaikimisi ning pakub tugevat staatilist tĂŒĂŒpimist loogiliste vigade minimeerimiseks.
Allikas: opennet.ru
