Rust 1.82 útbrocht. Nije browser basearre op Rust. It brûken fan Rust yn Volvo

De algemiene programmeertaal Rust 1.82, oprjochte troch it Mozilla-projekt mar no ûntwikkele ûnder auspysjes fan de ûnôfhinklike non-profit organisaasje Rust Foundation, is frijjûn. De taal rjochtet him op ûnthâld feilichheid en jout de middels te berikken hege baan parallelism wylst it foarkommen fan it brûken fan in garbage collector en runtime (runtime wurdt redusearre ta basis inisjalisaasje en ûnderhâld fan de standert bibleteek).

De metoaden foar ûnthâldbehanneling fan Rust besparje de ûntwikkelder fan flaters by it manipulearjen fan oanwizers en beskermje tsjin problemen dy't ûntsteane troch ûnthâldôfhanneling op leech nivo, lykas tagong krije ta in ûnthâldgebiet nei't it befrijd is, it ferwizen fan nul-oanwizers, buffer-oerrin, ensfh. Om bibleteken te fersprieden, builds te leverjen en ôfhinklikens te behearjen, ûntwikkelet it projekt de Cargo-pakketbehearder. It crates.io repository wurdt stipe foar hosting fan bibleteken.

Unthâld feilichheid wurdt foarsjoen yn Rust op it gearstallen tiid troch referinsje kontrôle, byhâlden fan foarwerp eigendom, byhâlden fan foarwerp lifetimes (omfang), en beoardielje de korrektheid fan ûnthâld tagong by koade útfiering. Rust leveret ek beskerming tsjin oerstreamingen fan heule getal, fereasket ferplichte inisjalisaasje fan fariabele wearden foar gebrûk, behannelet flaters better yn 'e standertbibleteek, tapast standert it konsept fan ûnferoarlike referinsjes en fariabelen, biedt sterke statyske typen om logyske flaters te minimalisearjen.

Wichtichste ynnovaasjes:

  • It kommando "ynfo" is tafoege oan de frachtpakketbehearder om ynformaasje oer in pakket yn 'e repository wer te jaan.
  • Stipe tafoege foar de "gebrûk<..>" syntaksis yn "impl Trait", dy't ynformaasje spesifisearret oer ferburgen typen. Bygelyks, "impl Trait + use<'x, T>" spesifisearret dat allinich de parameters "x" en "T" tastien binne te brûken yn in ferburgen type.
  • In aparte syntaksis foar it meitsjen fan rauwe oanwizers is foarsteld, dy't earder brûkte makro's ferfangt: de "addr_of!(expr)" makro is ferfongen troch de "&raw const expr" operator, en de "addr_of_mut!(expr)" makro is ferfongen. troch de operator "&raw mut" expr". struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82 }; // Alde manier om in rauwe oanwizer te meitsjen lit ptr = std::ptr::addr_of!(p.not_aligned_field); // Nije manier in meitsje in rauwe oanwizer lit ptr = & raw const p.not_aligned_field; let val = ûnfeilich { ptr.read_unaligned() }; }
  • It is mooglik om feilige funksjes en konstanten te definiearjen mei in 'statyske' libbensduur binnen eksterne blokken mei it "ûnfeilige" attribút (foarhinne koene alle eleminten yn in "ûnfeilige extern" allinich it "ûnfeilige" attribút hawwe): unsafe extern { pub feilich statyske TAU: f64; pub feilich fn sqrt(x: f64) -> f64; pub ûnfeilich fn strlen(p: *const u8) -> brûke; }
  • De no_mangle, link_section en export_name attributen, dy't liede kinne ta ûndefiniearre gedrach, wurde no as ûnfeilich beskôge en fereaskje in eksplisite "ûnfeilige" flagge, bygelyks: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • Pattern-oerienkomst lit lege typen oerslaan, lykas "enum Void {}" of struktueren mei in sichtber leech fjild. brûk std :: convert :: Infallible; pub fn unwrap_without_panic (x: resultaat ) -> T { let Ok(x) = x; // "Err" kin oerslein wurde x }
  • De typen foar driuwende puntnûmers (f32 en f64) hawwe standerdisearre gedrach by it ferwurkjen fan net-numerike NaN-wearden (0.0/0.0), en tastean ek it gebrûk fan driuwende punt-operaasjes yn const fn.
  • Assembly-ynfoegingen jouwe de mooglikheid om operanden te brûken mei it "const"-attribút om direkt heule nûmere wearden te brûken sûnder se earst yn in register op te slaan. const MSG: &str = "Hallo, wrâld!\n"; ûnfeilich { core::arch::asm!(“mov rdx, {LEN} // de ynstruksje 'mov rdx, 14′” sil oanmakke wurde, LEN = const MSG.len(), … ); }
  • Adressearjen fan útdrukkingen mei it "statyske" attribút is tastien yn in feilige kontekst sûnder in ûnfeilich blok te definiearjen (de operators "&raw mut" en "&raw const" hawwe gjin ynfloed op de wearde fan 'e operand en meitsje allinich in oanwizer nei it): statyske mut STATIC_MUT: Type = Type::nij(); extern "C" { statysk EXTERN_STATIC: Type; } fn main() { let static_mut_ptr = &raw mut STATIC_MUT; lit extern_static_ptr = & raw const EXTERN_STATIC; }
  • In nij diel fan 'e API is ferpleatst nei de kategory stabile, ynklusyf de metoaden en ymplemintaasjes fan eigenskippen binne stabilisearre:
    • std::thread::Builder::spawn_unchecked
    • std::str::CharIndices::offset
    • std :: opsje :: Opsje :: is_gjin_of
    • [T]::is_sortearre
    • [T]::is_sortearre_by
    • [T]::is_sortearre_by_key
    • Iterator :: is_sortearre
    • Iterator :: is_sorted_by
    • Iterator :: is_sorted_by_key
    • std::future::Ready::into_inner
    • std::iter::repeat_n
    • impl DoubleEndedIterator foar Take

      Boarne: opennet.ru

Add a comment