Paskelbtas „Mozilla“ projekto įkurtos, bet dabar globojamos nepriklausomos ne pelno organizacijos „Rust Foundation“ bendrosios paskirties programavimo kalbos „Rust 1.82“ leidimas. Kalba daugiausia dėmesio skiria atminties saugai ir suteikia galimybę pasiekti aukštą darbo lygiagretumą, vengiant šiukšlių rinktuvo ir vykdymo laiko (vykdymo laikas sumažinamas iki pagrindinės standartinės bibliotekos inicijavimo ir priežiūros).
„Rust“ atminties apdorojimo metodai apsaugo kūrėją nuo klaidų manipuliuojant rodyklėmis ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties tvarkymo, pvz., prieiga prie atminties srities ją atlaisvinus, nulinių rodyklių panaikinimas, buferio viršijimas ir kt. Siekiant platinti bibliotekas, teikti kūrimo ir valdyti priklausomybes, projektas sukuria krovinių paketų tvarkyklę. Crates.io saugykla palaikoma bibliotekų prieglobai.
Atminties sauga „Rust“ užtikrinama kompiliavimo metu, tikrinant nuorodas, stebint objekto nuosavybę, stebint objektų gyvavimo trukmę (apimtį) ir įvertinant prieigos prie atminties teisingumą vykdant kodą. Rust taip pat suteikia apsaugą nuo sveikųjų skaičių perpildymo, reikalauja, kad kintamieji būtų inicijuojami prieš naudojant, geriau tvarko klaidas standartinėje bibliotekoje, pagal numatytuosius nustatymus taiko nekintamų nuorodų ir kintamųjų koncepciją ir siūlo tvirtą statinį rašymą, kad būtų sumažintos loginės klaidos.
Pagrindinės naujovės:
- Komanda „info“ buvo pridėta prie krovinių paketų tvarkyklės, kad būtų rodoma informacija apie saugykloje esantį paketą.
- Pridėtas sintaksės "use<..>" palaikymas "impl Trait", kuris nurodo informaciją apie paslėptus tipus. Pavyzdžiui, „impl Trait + use<'x, T>“ nurodo, kad paslėptame tipe leidžiama naudoti tik parametrus „x“ ir „T“.
- Buvo pasiūlyta atskira sintaksė neapdorotų rodyklių kūrimui, pakeičianti anksčiau naudotas makrokomandas: makrokomandą „addr_of!(expr)“ pakeitė „&raw const expr“, o makrokomandą „addr_of_mut!(expr)“ pagal „&raw mut“ operatorių expr. struct Supakuotas { not_aligned_field: i32, } fn main() { let p = Supakuotas { not_aligned_field: 1_82 }; // Senas būdas sukurti neapdorotą rodyklę tegul ptr = std::ptr::addr_of!(p.not_aligned_field); // Naujas būdas sukurti neapdorotą rodyklę let ptr = &raw const p.not_aligned_field; tegul val = nesaugus { ptr.read_unaligned() }; }
- Galima apibrėžti saugias funkcijas ir konstantas, turinčias „statinį“ gyvavimo laiką išoriniuose blokuose su atributu „nesafe“ (anksčiau visi „nesafe extern“ elementai galėjo turėti tik „nesafe“ atributą): unsafe extern { pub safe statinis TAU : f64; pub safe fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
- Atributai no_mangle, link_section ir export_name, kurie gali sukelti neapibrėžtą elgesį, dabar laikomi nesaugiais ir reikalauja aiškios žymos "nesaugus", pavyzdžiui: #[unsafe(no_mangle)] pub fn my_global_function() { }
- Šablonų atitikimas leidžia praleisti tuščius tipus, pvz., „enum Void {}“ arba struktūras su matomu tuščiu lauku. naudoti std::convert::neklystantis; pub fn išvynioti_be_panikos (x: rezultatas ) -> T { tegul Ok(x) = x; // „Err“ galima praleisti x }
- Slankaus kablelio skaičių tipai (f32 ir f64) turi standartizuotą elgesį apdorojant neskaitines NaN reikšmes (0.0/0.0), taip pat leidžia naudoti slankiojo kablelio operacijas const fn.
- Surinkimo įdėklai suteikia galimybę naudoti operandus su atributu „const“, kad būtų galima tiesiogiai naudoti sveikųjų skaičių skaitines reikšmes, prieš tai jų neišsaugant registre. const MSG: &str = "Sveikas, pasauli!\n"; nesaugus { core::arch::asm!(“mov rdx, {LEN} // bus sugeneruota instrukcija 'mov rdx, 14′“, LEN = const MSG.len(), … ); }
- Adresuoti išraiškas su atributu „static“ leidžiama saugiame kontekste neapibrėžiant nesaugaus bloko (operandai „&raw mut“ ir „&raw const“ neturi įtakos operando vertei ir sukuria tik žymeklį į jį): static mut STATIC_MUT: Tipas = Tipas::naujas( ); extern "C" { static EXTERN_STATIC: tipas; } fn main() { tegul static_mut_ptr = &raw mut STATIC_MUT; tegul extern_static_ptr = &raw const EXTERN_STATIC; }
- Nauja API dalis buvo perkelta į stabiliųjų kategoriją, įskaitant stabilizuotus bruožų metodus ir įgyvendinimą:
- std::thread::Builder::spawn_unchecked
- std::str::CharIndexes::offset
- std::option::Option::yra_none_arba
- [T]::yra_rūšiuota
- [T]::surūšiuota_pagal
- [T]::yra_rūšiuota_pagal_raktą
- Iteratorius::yra_rūšiuotas
- Iteratorius::yra_rūšiuotas_pagal
- Iteratorius::yra_rūšiuotas_pagal_raktą
- std::future::Ready::in_inner
- std::iter::repeat_n
- impl DoubleEndedIterator for Take
Šaltinis: opennet.ru
