Rust 1.82 verëffentlecht. Neie Browser baséiert op Rust. Benotzt Rust am Volvo

D'Verëffentlechung vun der Rust 1.82 allgemeng Zweck Programméierungssprooch, gegrënnt vum Mozilla-Projet, awer elo entwéckelt ënner der Regie vun der onofhängeger Asbl Rust Foundation, gouf publizéiert. D'Sprooch konzentréiert sech op d'Erënnerungssécherheet a stellt d'Moyene fir en héije Jobparallelismus z'erreechen, während d'Benotzung vun engem Gerempels a Runtime vermeit (Runtime gëtt op Basisinitialiséierung an Ënnerhalt vun der Standardbibliothéik reduzéiert).

Rust d'Erënnerungsveraarbechtungsmethoden retten den Entwéckler vu Feeler beim Manipulatioun vu Pointer a schützt géint Probleemer déi entstinn wéinst nidderegen Niveau Memory Handhabung, sou wéi Zougang zu engem Erënnerungsberäich nodeems se befreit gouf, Nullpointer ofgeleent, Pufferiwwerschlag, etc. Fir Bibliothéiken ze verdeelen, Builds ze bidden an Ofhängegkeeten ze managen, entwéckelt de Projet de Cargo Package Manager. De crates.io Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten.

Gedächtnissécherheet gëtt a Rust zur Zesummesetzungszäit zur Verfügung gestallt duerch Referenzprüfung, Verfollegung vum Objektbesëtzer, Verfollegung vun Objektliewenszäiten (Scope), an d'Korrektheet vum Gedächtniszougang wärend der Code Ausféierung bewäerten. Rust bitt och Schutz géint ganz Zuelen Iwwerschwemmungen, erfuerdert obligatoresch Initialiséierung vu variabelen Wäerter virum Gebrauch, handhabt Feeler besser an der Standardbibliothéik, applizéiert d'Konzept vun onverännerleche Referenzen a Variablen als Standard, bitt staark statesch Tippen fir logesch Feeler ze minimiséieren.

Haaptinnovatiounen:

  • De Kommando "Info" gouf an de Cargo Package Manager bäigefüügt fir Informatioun iwwer e Package am Repository ze weisen.
  • Ënnerstëtzung bäigefüügt fir d'Syntax "benotzen<..>" an "impl Trait", déi Informatioun iwwer verstoppte Typen spezifizéiert. Zum Beispill, "impl Trait + use<'x, T>" spezifizéiert datt nëmmen d'Parameteren "x" an "T" erlaabt sinn an engem verstoppten Typ ze benotzen.
  • Eng getrennte Syntax fir Matière Pointer ze kreéieren gouf virgeschloen, déi virdru benotzte Makroen ersetzen: den "addr_of!(expr)" Makro gouf duerch den "&raw const expr" Bedreiwer ersat, an den "addr_of_mut!(expr)" Makro gouf ersat. vum "&raw mut" Bedreiwer expr". struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82 }; // Al Manéier e Matière Zeigefanger ze schafen loosse ptr = std :: ptr :: addr_of! (p.not_aligned_field); // Nei Manéier eng Matière Zeigefanger ze schafen loosse ptr = & raw const p.not_aligned_field; lass val = onsécher { ptr.read_unaligned() }; }
  • Et ass elo méiglech sécher Funktiounen a Konstante mat enger "statescher" Liewensdauer bannent externe Blocken mam "onsécher" Attribut ze definéieren (virdrun konnten all Elementer an engem "onsécheren externen" nëmmen dat "onsécher" Attribut hunn): onsécher extern { pub sécher statesch TAU: f64; pub sécher fn sqrt(x: f64) -> f64; pub onsécher fn strlen(p: *const u8) -> benotzen; }
  • D'no_mangle, link_section an export_name Attributer, déi zu ondefinéiert Verhalen féieren kënnen, ginn elo als onsécher ugesinn a verlaangen en explizit "onsécher" Fändel, zum Beispill: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • Muster Matching erlaabt eidel Typen ze iwwersprangen, sou wéi "enum Void {}" oder Strukture mat engem sichtbare eidele Feld. benotzen std :: konvertéieren :: Infallible; pub fn unwrap_ouni_panik (x: Resultat ) -> T { lass Ok(x) = x; // "Err" kann iwwersprangen x }
  • D'Typen fir Floating Point Zuelen (f32 an f64) hunn standardiséiert Verhalen beim Veraarbechtung vun net-numeresche NaN Wäerter (0.0/0.0), an erlaben och d'Benotzung vu Floating Point Operatiounen a const fn.
  • Assemblée Inserts bidden d'Fäegkeet fir Operanden mat dem "const" Attribut ze benotzen fir direkt ganz numeresch Wäerter ze benotzen ouni se fir d'éischt an engem Register ze späicheren. const MSG: &str = "Moien Welt!\n"; onsécher { core::arch::asm!("mov rdx, {LEN} // d'Instruktioun 'mov rdx, 14′" gëtt generéiert, LEN = const MSG.len(), … ); }
  • Adresséiere vun Ausdréck mat dem "statesche" Attribut ass erlaabt an engem séchere Kontext ouni en onséchere Block ze definéieren (d'"&raw mut" an "&raw const" Bedreiwer beaflossen net de Wäert vum Operand a kreéieren nëmmen e Pointer op et): statesch mut STATIC_MUT: Typ = Typ::nei(); extern "C" {statesch EXTERN_STATIC: Typ; } fn main() { let static_mut_ptr = & raw mut STATIC_MUT; loosse extern_static_ptr = & raw const EXTERN_STATIC; }
  • En neien Deel vun der API gouf an d'Kategorie vum Stall geplënnert, dorënner d'Methoden an d'Implementatioune vun de Charaktere goufen stabiliséiert:
    • std::thread::Builder::spawn_unchecked
    • std::str::CharIndices::offset
    • std::optioun::Optioun::ass_none_or
    • [T]::ass_sortéiert
    • [T]::ass_sorted_by
    • [T]::ass_no_Schlëssel sortéiert
    • Iterator :: ass_sortéiert
    • Iterator :: ass_sorted_by
    • Iterator :: ass_sorted_by_key
    • std::future::Ready::into_inner
    • std::iter::repeat_n
    • impl DoubleEndedIterator fir Take

      Source: opennet.ru

Setzt e Commentaire