sĂŒsteemse programmeerimise keele vĂ€ljaanne , mille on loonud Mozilla. Keel keskendub mĂ€lu ohutule kasutamisele, tagab automaatse mĂ€lu haldamise ja pakub vahendeid kĂ”rge paralleelsuse saavutamiseks ĂŒlesannete tĂ€itmisel, kasutamata samas prĂŒgikorjajat ja runtime'i.
Rustis tagab automaatne mĂ€lu haldamine arendajale mĂ€lukĂ€itlemise manipuleerimise vabastamise ja kaitseb madala taseme mĂ€lu töötlemisega seotud probleemide eest, nagu mĂ€lu kasutamine pĂ€rast selle vabastamist, nullviidete de-referentsimine, puhverduspiiride ĂŒletamine jne. Raamatukogude jagamiseks, koostamise tagamiseks ja sĂ”ltuvuste haldamiseks arendatakse pakihaldurit , mis vĂ”imaldab vajalikke raamatukogusid ĂŒhe klikiga hankida. Raamatukogude paigutamiseks toetatakse hoidlapaiku .
Peamised :
- Stabiliseeritud tĂŒĂŒp (trait) , mille vÀÀrtuse arvutamine vĂ”ib veel olla lĂ”petamata async / .await plokkide kasutamise protsessi kĂ€igus. Future abil mÀÀratletud asĂŒnkroonsed vÀÀrtused vĂ”imaldavad jĂ€tkata kasulikku tööd, samal ajal oodates kindla vÀÀrtuse arvutamise lĂ”petamist;
- Stabiliseeritud raamatukogu , mis pakub nutikaid osutajaid ja kogusid mĂ€luhalduseks. MĂ€lutaotlemiseks kasutatakse nĂŒĂŒd tĂŒĂŒp , mida imporditakse allocist. Alloc'i eraldi kasutamine on mĂ”istlik programmides, mis ei ole seotud std («#![no_std]»), samuti raamatukogudes, mis on mĂ”eldud kasutamiseks sellistes programmides ilma std-ita;
- AlgvÀÀrtuste korrektsuse kontrollide ĂŒmbersĂ”itmiseks vahepealne tĂŒĂŒp , mida saab kasutada mem::uninitialized funktsiooni turvalisema alternatiivina. Funktsioon mem::uninitialized on kasulik kiirete massiivide loomiseks, kuid viib kompilatsiooni eksitusse, kuna loob mulje, et initsialiseerimine on toimunud, samas kui vÀÀrtus jÀÀb initsialiseerimata. MaybeUninit vĂ”imaldab kompilatorile selgelt nĂ€idata, et vÀÀrtus on initsialiseerimata, arvestama seotud vĂ”imalike mÀÀramatute kĂ€itumistega ning programmides korraldada kontrolli lĂ€bi âmaybe_t:â ja etappide lĂ”ikes initsialiseerimise, mĂ€rkides selle lĂ”petamise â.assume_init()â kasutamisega. MaybeUnit'i tulekuga on funktsioon mem::uninitialized kuulutatud vananenuks ja ei ole soovitatav kasutada.
- NLL (non-lexikalised elueaegade) tehnoloogia, mis laiendab laenatud muutujate eluea arvestuse sĂŒsteemi, on stabiliseeritud Rust 2015 keele jaoks (algse NLL toeti ainult Rust 2018). Ahnkuse eluea sidumise asemel lexikaalsel tasandil, teostab NLL arvestust tĂ€itmisevoo suhete, mis vĂ”imaldab parandada muutujate laenamise kvaliteedi kontrolli (borrow checker) ja lubab teatud tĂŒĂŒpi korrektsete koodide tĂ€itmise, mis varem pĂ”hjustas viga. Uus kĂ€itumine lihtsustab oluliselt ka silumist.
- Uus assotsiatiivsete massiivide teostus on lisatud. , mis pÔhineb struktuuri (laaditakse automaatselt , kui ei ole selgelt mÀÀratud muud, nÀiteks std::HashMap, mis pÔhineb SipHash 1-3). Programmi liides on jÀÀnud samaks, mÀrgatavad erinevused arendajatele on seotud jÔudluse suurenemise ja mÀlu tarbimise vÀhenemisega.
- Pakihaldurisse cargo âofflineâ valik, mis vĂ”imaldab töötamist ilma vĂ”rguĂŒhenduseta, kus sĂ”ltuvuste installimisel kasutatakse ainult kohalikus sĂŒsteemis vahemĂ€lus olevaid pakette. Kui sĂ”ltuvust ei ole kohalikes vahemĂ€ludes, kuvatakse tĂ”rge. Enne offline-reĆŸiimi sisenemist saab sĂ”ltuvuste eelnevalt kohalikes vahemĂ€ludes laadimiseks kasutada kĂ€sku âcargo fetchâ;
- Makro âdbg!â saab nĂŒĂŒd kutsuda, mÀÀrates mitu argumenti;
- MĂ€rgis âconstâ, mis mÀÀrab kasutamise vĂ”imaluse igas kontekstis konstantide asemel, on rakendatud meetoditele
Layout::from_size_align_unchecked,
mem::needs_drop,
NonNull::dangling ja
NonNull::cast; - Uue API partii on tÔlgitud stabiilsetesse, sealhulgas on stabiliseeritud meetodid
task::Waker, task::Poll,
VecDeque::rotate_left, VecDeque::rotate_right,
Read::read_vectored, Write::write_vectored,
Iterator::copied,
BorrowMut (stringide jaoks) ja str::as_mut_ptr.
Allikas: opennet.ru
