Rust 1.42 Programméiersprooch Fräisetzung

publizéiert System Programméierungssprooch Verëffentlechung roscht 1.42, gegrënnt vum Mozilla-Projet. D'Sprooch konzentréiert sech op d'Erënnerungssécherheet, bitt automatesch Gedächtnisverwaltung a liwwert Tools fir en héije Aufgabeparallelismus z'erreechen ouni e Gerempels ze benotzen an Course.

Rust automatesch Erënnerung Gestioun befreit den Entwéckler vun Pointer Manipulatioun a schützt géint Problemer déi aus niddereg-Niveau Erënnerung Manipulatioun entstinn, wéi no-gratis Erënnerung Accès, Null Pointer dereferences, Puffer Iwwerstonnen, an dergläiche. E Package Manager gëtt entwéckelt fir Bibliothéiken ze verdeelen, Assemblée ze garantéieren an Ofhängegkeete vum Projet ze managen. cargo, erlaabt Iech d'Bibliothéike fir de Programm an engem Klick ze kréien. E Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten crates.io.

Haaptstrooss Innovatiounen:

  • Dobäigesat Ënnerstëtzung fir Templates fir passenden Deeler vu Scheiwen (dynamesch Arrays, Slice). Virdrun ware genee Matcher erlaabt, awer elo ass et méiglech Konstruktiounen ze benotzen déi "." markéiert sinn fir déi verbleiwen Elementer vun der Array ze decken. Zum Beispill:

    fn foo(Wierder: &[&str]) {
    Match Wierder {

    // kontrolléiert d'Startelementer vun der Array an ignoréiert
    Elementer no hinnen
    ["Moien", "Welt", "!", ..] => println!("Hallo Welt!"),

    // kontrolléiert déi éischt zwee Elementer "Foo" an "Bar", an de Rescht ass net wichteg
    ["Foo", "Bar", ..] => println!("Baz"),

    // ignoréiert alles, awer dat lescht Element muss "!" sinn.
    [.., "!"] => println!(“!!!”),

    // an der Startschnëtt enthalen mir alles ausser dat lescht Element, dat soll "z" sinn
    [start @ .., "z"] => println!("fänkt mat: {:?}", start),

    // um Enn Slice setzen mir alles ausser dat éischt Element, wat "a" soll sinn.
    ["a", end @ ..] => println!("end mat: {:?}", Enn),

    rest => println!("{:?}", rest),
    }
    }

  • En neie Makro "Mätscher!" bäigefüügt, deen en Ausdrock an e Muster als Input hëlt, a gëtt "richteg" zréck wann d'Muster dem Ausdrock entsprécht. D'Schabloun kann "|" Operatiounen benotzen an "wann".

    match self.partial_cmp(other) {
    E puer (Manner) => richteg,
    _ => falsch,
    }

    Matchs!(self.partial_cmp(other), Some(Manner))

    loosse foo = 'f';
    assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));

    loosse Bar = Some (4);
    behaapten!(matcht!(Bar, Some(x) wann x> 2));

  • A Panik Messagen ugewisen wann falsch benotzt
    Typen Optioun a Resultat, weisen elo Linnnummeren mat engem Link op de Code deen de problematesche Uruff gemaach huet, anstatt Linken op de Code deen den Uruff am Libcore implementéiert. Zum Beispill beaflosst d'Ännerung d'Uriff fir unzepaken an ze erwaarden iwwer Option :: Keen, oder crasht wann Dir unwrap_err, erwaart, expect_err an ähnlech Methoden am Resultattyp benotzt.

  • De Cargo Package Manager bitt automatesch Ersatz vun "proc_macro crate" an den "extern" Block fir Packagen mat prozedurale Makroen. Dës Ännerung erlaabt d'"Benotzen" Direktiv op prozedural Makroen applizéiert ze ginn ouni "extern Crate proc_macro;" am Code ze spezifizéieren. Zum Beispill, wann de Programm d'Linn "benotzt proc_macro :: TokenStream;" benotzt, da bleift de Code elo funktionnéiert wann "extern crate proc_macro;" dovunner ewechgeholl gëtt.
  • D'Kapazitéite vun der Standardbibliothéik goufen erweidert. In iter :: Eidel dobäi Schéckt a synchroniséiert Ënnerstëtzung fir all T Wäerter.
    Calls Pin::{map_unchecked, map_unchecked_mut} geliwwert vun engem Typ Wäert fir d'Ëmsetzung "Gréisst" zréckginn.
    In io :: Cursor ëmgesat PartialEq an Eq. Den Attribut "const" bestëmmt d'Méiglechkeet fir an all Kontext ze benotzen anstatt Konstanten, ugewannt fir de Layout :: nei Method.

  • En neien Deel vun der API gouf an déi stabil Kategorie transferéiert, dorënner de stabiliséierte CondVar ::wait_while, CondVar ::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    Manuell Drop :: huelen,
    ptr::slice_from_raw_parts_mut an ptr::slice_from_raw_parts.

  • D'Feeler :: Beschreiwungsmethod gouf ofgeschaaft.
  • Gitt zweeten Niveau Ënnerstëtzung fir armv7a-none-eabi a riscv64gc-unknown-linux-gnu Plattformen. Ënnerstëtzung fir d'Standardbibliothéik fir d'riscv64gc-unknown-linux-gnu Plattform gouf zur Verfügung gestallt.
    Apple 32-bëssen Plattformen degradéiert bis zum drëtten Niveau vun der Ënnerstëtzung, wat Basis Ënnerstëtzung implizéiert, awer ouni automatiséiert Testen a Verëffentlechung vun offiziellen Builds. De Downgrade an der Ënnerstëtzung ass wéinst Apple net méi 32-Bit Plattformen ënnerstëtzt.

Source: opennet.ru

Setzt e Commentaire