Udgivelse af Rust 1.82. Ny browser på Rust. Brug af Rust i Volvo

Version 1.82 af det generelle programmeringssprog Rust er blevet offentliggjort. Det blev oprindeligt udviklet af Mozilla, men udvikles nu under tilsyn af den uafhængige non-profit organisation Rust Foundation. Sproget fokuserer på sikker håndtering af hukommelse og giver værktøjer til at nå høj parallelisme i opgaveudførelse, mens det undgår brugen af garbage collector og runtime (runtime er begrænset til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

Metoder til hukommelsesarbejde i Rust befrier udviklere fra fejl ved manipulation af pekere og beskytter mod problemer, der opstår ved lavniveau håndtering af hukommelse, såsom adgang til hukommelsesområder efter frigivelse, dereferering af nulpekere, buffer-overløb osv. For distribution af biblioteker, byggeprocesser og afhængighedsstyring udvikles pakkehåndteringssystemet Cargo. For opbevaring af biblioteker understøttes repository'et crates.io.

Sikker håndtering af hukommelse sikres i Rust under kompilering ved referencekontrol, sporing af ejerskab af objekter, hensyntagen til livstid af objekter (synlighed) og vurdering af korrekt adgang til hukommelse under kodeudførelse. Rust tilbyder også midler til beskyttelse mod heltals-overløb, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med uforanderlige (immutable) referencer og variabler som standard og tilbyder stærk statisk typisering for at minimere logiske fejl.

Hovednyhederne:

  • Der er tilføjet en "info"-kommando til pakkehåndteringssystemet cargo for at vise oplysninger om pakken i repositoriet.
  • Støtte til syntaksen "use" i "impl Trait" er blevet tilføjet for at definere information om skjulte typer. For eksempel angiver "impl Trait + use" at der kun må bruges parametre "x" og "T" i den skjulte type.
  • Der er foreslået en separat syntaks til oprettelse af raw-pegepinde, som erstatter de tidligere anvendte makroer: makroen "addr_of!(expr)" er blevet erstattet af operatoren "&raw const expr", og makroen "addr_of_mut!(expr)" er blevet erstattet af operatoren "&raw mut expr". struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82 }; // Den gamle metode til oprettelse af raw-pegepind let ptr = std::ptr::addr_of!(p.not_aligned_field); // Den nye metode til oprettelse af raw-pegepind let ptr = &raw const p.not_aligned_field; let val = unsafe { ptr.read_unaligned() }; }
  • Muligheden for at definere sikre (safe) funktioner og konstanter med livstid 'static' inden for extern-blokke med "unsafe"-mærket er blevet introduceret (tidligere kunne alle elementer i "unsafe extern" kun have "unsafe"-mærket): unsafe extern { pub safe static TAU: f64; pub safe fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
  • Attributterne no_mangle, link_section og export_name, der kan føre til udefineret adfærd, betragtes nu som usikre og kræver en explicit markering med "unsafe", for eksempel: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • Ved mønster matching er det tilladt at springe over tomme typer som "enum Void {}" eller strukturer med synligt tomme felter. use std::convert::Infallible; pub fn unwrap_without_panic(x: Result) -> T { let Ok(x) = x; // "Err" kan springes over x }
  • I typerne for float tal (f32 og f64) er adfærden ved håndtering af ikke-numeriske værdier NaN (0.0/0.0) standardiseret, og brugen af operationer med float i const fn er tilladt.
  • I assembly inserts, the use of operands with the 'const' attribute is provided for the direct use of integer values without their prior storage in the register. const MSG: &str = "Hello, world!\n"; unsafe { core::arch::asm!( "mov rdx, {LEN} // instruction 'mov rdx, 14' will be formed", LEN = const MSG.len(), … ); }
  • Addressing expressions with the 'static' attribute is allowed in a safe context without defining an unsafe block (the operators '&raw mut' and '&raw const' do not affect the operand value and only create a pointer to it): static mut STATIC_MUT: Type = Type::new(); extern 'C' { static EXTERN_STATIC: Type; } fn main() { let static_mut_ptr = &$raw mut STATIC_MUT; let extern_static_ptr = &$raw const EXTERN_STATIC; }
  • En ny batch af API'er er blevet klassificeret som stabile, herunder stabilisering af metoder og implementeringer af traits:
    • std::thread::Builder::spawn_unchecked
    • std::str::CharIndices::offset
    • std::option::Option::is_none_or
    • [T]::is_sorted
    • [T]::is_sorted_by
    • [T]::is_sorted_by_key
    • Iterator::is_sorted
    • Iterator::is_sorted_by
    • Iterator::is_sorted_by_key
    • std::future::Ready::into_inner
    • std::iter::repeat_n
    • impl DoubleEndedIterator for Take

      Kilde: opennet.ru
Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster