Avaldatud on Rust 1.56 sĂŒsteemikeele vĂ€ljaanne, mis pĂ”hineb Mozilla projektist, kuid mida arendatakse nĂŒĂŒd sĂ”ltumatu mittetulundusĂŒhingu Rust Foundation eesotsas. Peale tavaversiooni numbri on vĂ€ljaanne tĂ€histatud ka kui Rust 2021 ning see tĂ€histab kolme viimase aasta jooksul ettepanekute stabiliseerimist. Rust 2021 toimib samuti aluseks funktsionaalsuse arendamiseks jĂ€rgmise kolme aasta jooksul, sarnaselt sellele, kuidas Rust 2018 vĂ€ljaanne oli aluseks keele arengule viimase kolme aasta jooksul.
Arenduse ajal vĂ”ivad arendajad oma programmides kasutada mĂ€rke "2015", "2018" ja "2021", et seostada programmid keele olekute lĂ”ikega, mis vastavad valitud Rusti vĂ€ljaannetele. Need vĂ€ljaanded kasutusele vĂ”eti, et eristada ĂŒhilduvaid muudatusi ja neid seadistatakse cargo pakettide metainfos lĂ€bi vĂ€ljaande "edition" vĂ€ljaandeseosas. NĂ€iteks vĂ€ljaanne "2018" hĂ”lmab stabiliseeritud funktsionaalsust, mis kehtis 2018. aasta lĂ”puks ja sisaldab kĂ”iki edasisi muudatusi, mis ei kahjusta ĂŒhilduvust. VĂ€ljaanne "2021" sisaldab lisaks ĂŒhilduvust rikkuvaid uuendusi, mis on pakutud praeguses versioonis 1.56 ja kinnitatud tulevikus rakendamiseks. VĂ€ljaanded ei kĂ€sitle ainult keelt, vaid arvestavad ka tööriistade ja dokumentatsiooni seisundit.
Peamised ĂŒhilduvuse probleemid, mis on registreeritud Rust 2021-s:
- Ăksikute nimede saamine sulgudes â sulud saavad nĂŒĂŒd haarata eraldi vĂ€ljanimed kogu identifikaatori asemel. NĂ€iteks "|| a.x + 1" haarab ainult "a.x" asemel "a".
- IntoIterator tĂŒĂŒbid massiivide jaoks: array.into_iter() vĂ”imaldab massiivi elementide iteratsiooni vÀÀrtuste, mitte viidete kaudu.
- ĐŒĐ°Đșrorules on muudetud «|» (loogiline OR) tehete töötlemine malle â «:pat» spetsiifika musterse nĂŒĂŒd arv mudeleid «A | B».
- paketihaldurisse cargo on vaikimisi lisatud teine versioon vÔime mÀÀratlejat (feature resolver), mille toetust on pakutud Rust 1.51.
- TĂŒĂŒbid (trait) TryFrom, TryInto ja FromIterator on lisatud standardbiblioteegi prelude'i.
- Makrosid panic!(..) ja assert!(expr, ..) kasutatakse nĂŒĂŒd alati stringide vormindamiseks format_args!(..), sarnaselt println!() funktsiooniga.
- Keeles reserveeritud vĂ€ljendid ident#, ident»âŠÂ» ja identââŠâ on.
- Hoiatused bare_trait_objects ja ellipsis_inclusive_range_patterns on muudetud vigadeks.
Uudised Rust 1.56:
- Cargo.toml failis sektoris «[package]» on lisatud rust-version vÀli, millega saab mÀÀrata minimaalne toetatud Rusti versioon crate-paketi jaoks. Kui praegune versioon ei vasta mÀÀratud parameetrile, katkestab Cargo töö ja vÀljastab vea.
- Mugavamas iseloomus isikule seondumisel âbinding @ patternâ lake on ellujĂ”udmine lisade kĂ€sitsemiseks (nt âlet matrix @ Matrix { row_len, .. } = get_matrix();â).
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒpide rakendused:
- std::os::unix::fs::chroot
- UnsafeCell::raw_get
- BufWriter::into_parts
- core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
- Vec::shrink_to
- String::shrink_to
- OsString::shrink_to
- PathBuf::shrink_to
- BinaryHeap::shrink_to
- VecDeque::shrink_to
- HashMap::shrink_to
- HashSet::shrink_to
- Rottel 'const', mis mÀÀrab vÔimaluse kasutada seda igas kontekstis konstantide asemel, on rakendatud funktsioonides.
- std::mem::transmute
- [T]::first
- [T]::split_first
- [T]::last
- [T]::split_last
- Kompilaator on ĂŒle viidud LLVM 13 versiooni kasutusele.
- Teise taseme tugi aarch64-apple-ios-sim platvormi jaoks on rakendatud ning kolmas tase platvormidele powerpc-unknown-freebsd ja riscv32imc-esp-espidf. Kolmas tase tÀhendab pÔhilist tuge, kuid ilma automatiseeritud testimiseta, ametlike koostiste vÀljaandmiseta ja koodi koostamise vÔimaluste kontrollimiseta.
Tuletame meelde, et Rusti keel keskendub mĂ€luga ohutule töötlusele, tagab automaatse mĂ€luhalduse ja pakub vahendeid ĂŒlesannete kĂ”rge paralleelsete tĂ€itmise taseme saavutamiseks, ilma et oleks vaja jÀÀtme kogumise sĂŒsteemi ja runtime'i (runtime piirdub pĂ”hiinitsialiseerimise ja standardteegi hooldusega).
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.
Allikas: opennet.ru
