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 :
- Lisatud on torujĂ”udude kompileerimise reĆŸiim (pipelined), mille kĂ€igus algab sĂ”ltuva crate-paketi koostamine kohe, kui sĂ”ltuvuste metaandmed on saadaval, ootamata selle kompileerimise lĂ”petamist. Paketi kompileerimiseks ei ole vaja, et sĂ”ltuvused oleksid tĂ€ielikult kompileeritud, piisab ainult metaandmete mÀÀratlemisest, mis hĂ”lmavad tĂŒĂŒbilisti, sĂ”ltuvusi ja eksporditavaid elemente. Metaandmed on saadaval kompileerimise algfaasis, seega saab seotud pakette nĂŒĂŒd alustada palju varem. Ăksikute pakkide koostamisel ei mĂ”juta ettepanekud reĆŸiim jĂ”udlust, kuid kui koostamine hĂ”lmab pakette keeruliste sĂ”ltuvustega, vĂ”ib kogu koostamisaeg vĂ€heneda 10-20%;
- Tagatakse valefunktsioonide tuvastamine ja . NĂ€iteks on std::mem::uninitialized mugav massiivide kiireks loomiseks, kuid see petab kompilaatorit, kuna tekitab illusiooni, et initsialiseerimine on toimunud, samas kui vÀÀrtus jÀÀb initsialiseerimata. Funktsioon mem::uninitialized on juba deklareeritud aegunuks ja selle asemel soovitatakse kasutada vahetype. . Mis puudutab mem::zeroed, siis see funktsioon vĂ”ib pĂ”hjustada probleeme tĂŒĂŒpidega, mis ei saa vastu vĂ”tta nullvÀÀrtusi.
Uue vĂ€ljaande kompilaatorisse on lisatud lint-kontroll, et tuvastada mÀÀramatut kĂ€itumist, tuvastades mĂ”ningaid probleeme mem::uninitialized vĂ”i mem::zeroed kasutamisega. NĂ€iteks antakse nĂŒĂŒd tĂ”rketeade, kui proovida kasutada mem::uninitialized vĂ”i mem::zeroed tĂŒĂŒpide &T ja BoxâčTâș puhul, mis esindavad objekti viiteid, mis ei saa vastu vĂ”tta nullvÀÀrtusi;
- On laiendatud atribuutide «#[deprecated]» kasutusvÔimalusi, mis vÔimaldavad mÀrgistada crate-pakette aegunuks ja tulevikus eemaldamiseks kavandatuks. Alates Rust 1.38 versioonist vÔib seda atribuuti rakendada ka makrode puhul;
- On lisatud vÔimalus rakendada atribuuti «#[global_allocator]» alamoodulites;
- Lisa funktsionaalsus , mis vĂ”imaldab teada saada tĂŒĂŒpi nime, mis vĂ”ib olla kasulik silumiseks. NĂ€iteks tĂ€itmise ajal saab teada, millise tĂŒĂŒbiga funktsioon on kutsutud:
fn gen_valueâčT: Defaultâș() -âș T {
println!("Initializing an instance of {}", std::any::type_name::âčTâș());
Default::default()
}fn main() {
let _: i32 = gen_value(); # vĂ€ljapanev âi32â
let _: String = gen_value(); # vĂ€ljapanev âalloc::string::Stringâ
} - StandardsĂŒsteemi funktsioonid on laienenud:
- slice::{concat, connect, join} vĂ”ib nĂŒĂŒd aktsepteerida vÀÀrtust &[T] lisaks &T;
- "*const T" ja "*mut T" rakendavad nĂŒĂŒd marker::Unpin;
- "Arcâč[T]âș" ja "Rcâč[T]âș" rakendavad nĂŒĂŒd FromIteratorâčTâș;
- iter::{StepBy, Peekable, Take} rakendavad nĂŒĂŒd DoubleEndedIterator.
- ascii::EscapeDefault rakendab Clone ja Display.
- Uue API partii on tÔlgitud stabiilsetesse, sealhulgas on stabiliseeritud meetodid
- âč*const Tâș::cast, âč*mut Tâș::cast,
- Duration::as_secs_f{32|64},
- Duration::div_duration_f{32|64},
- Duration::div_f{32|64},
- Duration::from_secs_f{32|64},
- Duration::mul_f{32|64},
- jÀÀkide jagamise operatsioonid
div_euclid ja rem_euclid kÔigi tÀisarvudega primitiivide jaoks;
- Paketihaldurisse cargo on lisatud toetus ââfeaturesâ valiku mitu korda mÀÀramiseks erinevate vĂ”imaluste aktiveerimiseks;
- Kompilaatoris on tagatud kolmas toetust sihtrite platvormidele aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc, armv7-unknown-linux-gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl ja riscv32i-unknown-none-elf. Kolmas tase eeldab pÔhilist toetust, kuid ilma automatiseeritud testimise ja ametlike ehituste avaldamiseta.
Allikas: opennet.ru
