Avaldatud on üldotstarbelise programeerimiskeele Rust 1.58 versioon, mis põhines Mozilla projektis, kuid mida arendab praegu iseseisev mittetulundusühing Rust Foundation. Keele keskmes on mälu ohutu käsitsemine, see tagab automaatse mälu halduse ja pakub vahendeid ülesannete kõrge paralleelsuse saavutamiseks, vältides samas prügikollektsiooni ja runtime'i kasutamist (runtime piirdub põhilise initsialiseerimise ja standardteegi hooldamisega).
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:
- Reformatted string blocks now allow for the substitution of arbitrary identifiers by adding expressions like «{identifier}» into the string, in addition to the previously supported substitutions by explicitly listing variables by number and name. For example: { // Previously supported constructs: println!(«Hello, {}!», get_person()); println!(«Hello, {0}!», get_person()); println!(«Hello, {person}!», person = get_person()); // now you can specify let person = get_person(); println!(«Hello, {person}!»);
Identifiers can also be specified directly in formatting parameters. let (width, precision) = get_format(); for (name, score) in get_scores() { println!(«{name}: {score:width$.precision$}»); }
The new substitution works in all macros that support string format definitions, except for the «panic!» macro in Rust versions 2015 and 2018, where panic!(«{ident}») is handled as a regular string (substitution works in Rust 2021).
- Windows platvormil on std::process::Command'i struktuuri käitumine muudetud, mis command'e täites turvalisuse kaalutlustel enam täitevfailide otsimist praegusest kataloogist ei toimu. Praegune kataloog on välistatud, kuna seda võib kasutada pahatahtliku koodi käivitamiseks, kui programme käivitatakse usaldamatutesse kataloogidesse (CVE-2021-3013). Uus täitevfailide leidmise loogika hõlmab otsimist Rust'i kataloogidest, rakenduse kataloogist, Windows'i süsteemikataloogist ja PATH keskkonnamuutuja määratud kataloogidest.
- Standardraamatukogus on suurendatud funktsioonide arvu, mis on märgistatud "#[must_use]", et anda hoiatust, kui tagastatud väärtust ignoreeritakse, aidates tuvastada vigu, mis on põhjustatud eeldusest, et funktsioon muudab väärtusi, mitte ei tagasta uut väärtust.
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
- Metadata::is_symlink
- Path::is_symlink
- {integer}::saturating_div
- Option::unwrap_unchecked
- Result::unwrap_unchecked
- Result::unwrap_err_unchecked
- Konstantse märgendiga `const`, mis määrab võimaluse kasutada konstandina igas kontekstis, on rakendatud funktsioonides:
- Duration::new
- Duration::checked_add
- Duration::saturating_add
- Duration::checked_sub
- Duration::saturating_sub
- Duration::checked_mul
- Duration::saturating_mul
- Duration::checked_div
- Kahekohaliste näidikute „*const T” dereferentseerimine on lubatud „const” kontekstides.
- Cargo pakettihalduris on paketi metaandmetesse lisatud rust_version väli ning käsule "cargo install" on lisatud valik "—message-format".
- Kompilaatoris on rakendatud CFI (Control Flow Integrity) kaitsemehhanismi toetust, mis lisab iga kaudse funktsiooni kutsumise ette kontrolli, et tuvastada teatud määramatute käitumisvormide juhtumeid, mis võivad potentsiaalselt rikkuda normaalset käitamisjärjekorda (control flow) koodis, muutes mälu salvestatud funktsiooni näitajaid.
- Kompilaatorisse on lisatud tugi LLVM katvuse kaardistamise formaatide 5. ja 6. versiooni jaoks, mida kasutatakse koodi katvuse hindamiseks testimise käigus.
- Kompilaatori minimaalsete LLVM versiooninõuete tase on tõstetud LLVM 12-ni.
- On rakendatud kolmandat taset toe jaoks platvormile x86_64-unknown-none. Kolmas tase tähistab põhitoetust, kuid ilma automatiseeritud testimise, ametlike kogumiste väljaandmise ja koodi kompileerimise võimaluste kontrollita.
Lisaks tasub mainida, et Microsoft on avaldanud Rust for Windows 0.30 raamatukogude versiooni, mis võimaldab kasutada Rust keelt Windowsi rakenduste arendamiseks. Komplekti kuuluvad kaks crate-paketti (windows ja windows-sys), mille kaudu saab Rust keeles Win API-le juurde pääseda. API toe kood genereeritakse dünaamiliselt API kirjeldavate metaandmete põhjal, mis võimaldab toe ellu viia mitte ainult juba olemasolevatele Win API kõnedele, vaid ka tulevastele kõnedele. Uues versioonis on lisatud tugi sihtplatvormile UWP (Universal Windows Platform), teostatud on Handle ja Debug tüübid.
Allikas: opennet.ru
