Välja antud Rust 1.82. Uus Rustil põhinev brauser. Rooste kasutamine Volvos

Avaldatud on Mozilla projektiga rajatud, kuid nüüdseks sõltumatu mittetulundusühingu Rust Foundation egiidi all välja töötatud üldotstarbelise programmeerimiskeele Rust 1.82 väljalase. Keel keskendub mälu ohutusele ja pakub vahendeid töö kõrge paralleelsuse saavutamiseks, vältides samal ajal prügikoguja ja käitusaja kasutamist (käitusaeg lüheneb standardse teegi põhikäivitamise ja hoolduseni).

Rusti mälukäsitlusmeetodid säästavad arendajat osutitega manipuleerimisel esinevate vigade eest ja kaitsevad madala tasemega mälukäsitluse tõttu tekkivate probleemide eest, nagu mälualale juurdepääs pärast selle vabastamist, nullviidate viitamise tühistamine, puhvri ülekoormus jne. Teekide levitamiseks, järkude pakkumiseks ja sõltuvuste haldamiseks arendab projekt Cargo paketihaldurit. Hoidlat crates.io toetatakse teekide majutamiseks.

Mälu turvalisus on Rustis kompileerimise ajal tagatud viidete kontrollimise, objekti omandiõiguse jälgimise, objektide eluea (ulatuse) jälgimise ja mälule juurdepääsu õigsuse hindamise kaudu koodi täitmise ajal. Rooste pakub ka kaitset täisarvude ületäitumise eest, nõuab muutujate väärtuste kohustuslikku lähtestamist enne kasutamist, käsitleb standardteegi vigu paremini, rakendab vaikimisi muutumatute viidete ja muutujate kontseptsiooni, pakub tugevat staatilist tippimist loogiliste vigade minimeerimiseks.

Peamised uuendused:

  • Kaubapakihaldurisse on lisatud käsk “info”, et kuvada hoidlas oleva paki kohta teavet.
  • Lisatud on "impl Trait" süntaksi "use<..>" tugi, mis määrab teabe peidetud tüüpide kohta. Näiteks "impl Trait + use<'x, T>" määrab, et peidetud tüübis on lubatud kasutada ainult parameetreid "x" ja "T".
  • Toorosutite loomiseks on välja pakutud eraldi süntaks, mis asendab varem kasutatud makrosid: makro "addr_of!(expr)" on asendatud operaatoriga "&raw const expr" ja makro "addr_of_mut!(expr)" operaatori "&raw mut" poolt expr". struct Pakitud { not_aligned_field: i32, } fn main() { let p = Pakitud { not_aligned_field: 1_82 }; // Vana viis toorekursori loomiseks olgu ptr = std::ptr::addr_of!(p.not_aligned_field); // Uus viis töötlemata osuti loomiseks let ptr = &raw const p.not_aligned_field; las val = ebaturvaline { ptr.read_unaligned() }; }
  • Atribuudiga "unsafe" on võimalik defineerida staatilise elueaga turvalisi funktsioone ja konstante välisplokkide sees (varem võis "unsafe extern" kõikidel elementidel olla ainult atribuut "unsafe"): unsafe extern { pub safe staatiline TAU : f64; pub safe fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
  • Atribuudid no_mangle, link_section ja export_name, mis võivad viia määratlemata käitumiseni, loetakse nüüd ebaturvalisteks ja nõuavad selgesõnalist ebaturvalist lippu, näiteks: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • Mustri sobitamine võimaldab vahele jätta tühjad tüübid, näiteks "enum Void {}" või struktuurid, millel on nähtav tühi väli. use std::convert::Infallible; pub fn lahti_paanikata (x: tulemus ) -> T { olgu Ok(x) = x; // "Err" võib vahele jätta x }
  • Ujukomaarvude tüübid (f32 ja f64) on standardiseeritud käitumisega mittenumbriliste NaN väärtuste (0.0/0.0) töötlemisel ja võimaldavad kasutada ka ujukomatehinguid konst fn-is.
  • Assamblee lisad võimaldavad kasutada atribuudiga "const" operande, et kasutada otse täisarvulisi arvväärtusi ilma neid eelnevalt registrisse salvestamata. const MSG: &str = "Tere, maailm!\n"; unsafe { core::arch::asm!( “mov rdx, {LEN} // genereeritakse käsk 'mov rdx, 14′”, LEN = const MSG.len(), … ); }
  • Avaldiste adresseerimine atribuudiga „static” on lubatud turvalises kontekstis ilma ebaturvalist plokki defineerimata (operaatorid „&raw mut” ja „&raw const” ei mõjuta operandi väärtust ja loovad sellele ainult kursi): static mut STATIC_MUT: Tüüp = Tüüp::uus( ); extern "C" { staatiline EXTERN_STATIC: tüüp; } fn main() { las static_mut_ptr = &raw mut STATIC_MUT; let extern_static_ptr = &raw const EXTERN_STATIC; }
  • API uus osa on viidud stabiilsete kategooriasse, sealhulgas on stabiliseeritud meetodid ja tunnuste rakendused:
    • std::thread::Builder::spawn_unchecked
    • std::str::CharIndices::offset
    • std::option::Option::on_none_or
    • [T]::on_sorteeritud
    • [T]::sorditud_aluse järgi
    • [T]::on_sorditud_võtme järgi
    • Iteraator:: on_sorteeritud
    • Iteraator::on_sorted_by
    • Iteraator:: on_sorditud_võtme järgi
    • std::future::Valmis::inner_inner
    • std::iter::repeat_n
    • impl DoubleEndedIterator Take jaoks

      Allikas: opennet.ru

Lisa kommentaar