Izlaista Rust 1.82. Jauna pārlūkprogramma, kuras pamatā ir Rust. Rūsas izmantošana Volvo

Publicēts vispārējas nozīmes programmēšanas valodas Rust 1.82 izlaidums, kas dibināts ar Mozilla projektu, bet tagad izstrādāts neatkarīgās bezpeļņas organizācijas Rust Foundation paspārnē. Valoda koncentrējas uz atmiņas drošību un nodrošina līdzekļus, lai sasniegtu augstu darba paralēlismu, vienlaikus izvairoties no atkritumu savācēja un izpildlaika izmantošanas (izpildlaiks tiek samazināts līdz standarta bibliotēkas pamata inicializēšanai un uzturēšanai).

Rust atmiņas apstrādes metodes pasargā izstrādātāju no kļūdām, manipulējot ar rādītājiem, un aizsargā pret problēmām, kas rodas zema līmeņa atmiņas apstrādes dēļ, piemēram, piekļūšana atmiņas apgabalam pēc tā atbrīvošanas, nulles rādītāju atsauču atcelšana, bufera pārtēriņi utt. Lai izplatītu bibliotēkas, nodrošinātu būvējumus un pārvaldītu atkarības, projekts izstrādā Cargo pakotņu pārvaldnieku. Crates.io repozitorijs tiek atbalstīts bibliotēku mitināšanai.

Atmiņas drošība tiek nodrošināta Rust kompilēšanas laikā, pārbaudot atsauces, sekojot līdzi objekta īpašumtiesībām, sekojot līdzi objektu kalpošanas laikam (tvērumam) un novērtējot atmiņas piekļuves pareizību koda izpildes laikā. Rūsa arī nodrošina aizsardzību pret veselu skaitļu pārpildīšanu, pieprasa obligātu mainīgo vērtību inicializāciju pirms lietošanas, labāk apstrādā kļūdas standarta bibliotēkā, pēc noklusējuma piemēro nemainīgu atsauču un mainīgo jēdzienu, piedāvā spēcīgu statisko rakstīšanu, lai samazinātu loģiskās kļūdas.

Galvenie jauninājumi:

  • Kravas pakotnes pārvaldniekam ir pievienota komanda “info”, lai parādītu informāciju par paku repozitorijā.
  • Pievienots atbalsts "izmantot<..>" sintaksei "impl Trait", kas norāda informāciju par slēptajiem veidiem. Piemēram, "impl Trait + use<'x, T>" norāda, ka slēptā veidā ir atļauts izmantot tikai parametrus "x" un "T".
  • Ir ierosināta atsevišķa sintakse neapstrādātu rādītāju izveidei, aizstājot iepriekš lietotos makro: makro “addr_of!(expr)” ir aizstāts ar operatoru “&raw const expr”, bet makro “addr_of_mut!(expr)” ir aizstāts. ar operatoru “&raw mut” izteiciens”. struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82 }; // Vecais veids, kā izveidot neapstrādātu rādītāju let ptr = std::ptr::addr_of!(p.not_aligned_field); // Jauns veids, kā izveidot neapstrādātu rādītāju let ptr = &raw const p.not_aligned_field; let val = nedrošs { ptr.read_unaligned() }; }
  • Ir iespējams definēt drošas funkcijas un konstantes ar 'statisku' kalpošanas laiku ārējos blokos ar atribūtu "unsafe" (iepriekš visiem elementiem "unsafe extern" varēja būt tikai "unsafe" atribūts): unsafe extern { pub safe statiskā TAU : f64; pub safe fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
  • Atribūti no_mangle, link_section un export_name, kas var izraisīt nedefinētu darbību, tagad tiek uzskatīti par nedrošiem, un tiem ir nepieciešams precīzs karodziņš "nedroši", piemēram: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • Modeļu atbilstības noteikšana ļauj izlaist tukšus veidus, piemēram, "enum Void {}" vai struktūras ar redzamu tukšu lauku. izmantot std::convert::Infallible; pub fn unwrap_without_panic (x: rezultāts ) -> T { let Ok(x) = x; // "Err" var izlaist x }
  • Peldošā komata skaitļu tipiem (f32 un f64) ir standartizēta uzvedība, apstrādājot neskaitliskās NaN vērtības (0.0/0.0), un tie ļauj izmantot arī peldošā komata darbības konst fn.
  • Montāžas ieliktņi nodrošina iespēju izmantot operandus ar atribūtu “const”, lai tieši izmantotu veselas skaitliskas vērtības, vispirms tos nesaglabājot reģistrā. const MSG: &str = "Sveika, pasaule!\n"; unsafe { core::arch::asm!(“mov rdx, {LEN} // tiks ģenerēta instrukcija 'mov rdx, 14′”, LEN = const MSG.len(), … ); }
  • Izteiksmju adresēšana ar atribūtu “static” ir atļauta drošā kontekstā, nedefinējot nedrošu bloku (operatori “&raw mut” un “&raw const” neietekmē operanda vērtību un veido tikai rādītāju uz to): static mut STATIC_MUT: Tips = Tips::jauns( ); extern "C" { static EXTERN_STATIC: tips; } fn main() { let static_mut_ptr = &raw mut STATIC_MUT; let extern_static_ptr = &raw const EXTERN_STATIC; }
  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp ir stabilizētas pazīmju metodes un ieviešanas:
    • std::thread::Builder::spawn_unchecked
    • std::str::CharIndices::offset
    • std::opcija::Opcija::is_none_or
    • [T]::ir_kārtots
    • [T]::ir_kārtots_pēc
    • [T]::ir_kārtots_pēc_atslēgas
    • Iterators::ir_kārtots
    • Iterators::ir_kārtots_pēc
    • Iterators::ir_kārtots_pēc_atslēgas
    • std::future::Gatavs::into_inner
    • std::iter::repeat_n
    • impl DoubleEndedIterator for Take

      Avots: opennet.ru

Pievieno komentāru