Rust 1.40 Programméiersprooch Fräisetzung

publizéiert System Programméierungssprooch Verëffentlechung roscht 1.40, 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:

  • D'Fäegkeet bäigefüügt fir Strukturen (Struktur) an Opzielungen ze markéieren (Enum mat Variant Block) mam Attribut "#[non_exhaustive]", déi et erlaabt an Zukunft, nei Felder an Optiounen ze deklaréiert Strukturen an Enumeratiounen. Zum Beispill kënnen d'Entwéckler vu Moduler déi Strukture mat ëffentlech deklaréierte Felder hunn "#[non_exhaustive]" benotze fir Strukturen ze markéieren déi an Zukunft nei Felder bäigefüügt hunn. Bis elo, an dëser Situatioun, war den Entwéckler gezwongen tëscht Felder privat ze deklaréieren an un eng onverännerbar Lëscht vu Felder ze binden. Den neien Attribut läscht dës Begrenzung an erlaabt Iech nei Felder an der Zukunft ze addéieren ouni de Risiko vu virdru kompiléierten externen Code ze briechen. A Këschtpakete, wann Dir Optiounen an der "Match" Sektioun passt, ass eng explizit Definitioun vun der Mask "_ => {...}" erfuerderlech, déi méiglech zukünfteg Felder ofdeckt, soss gëtt e Feeler ugewisen wann Dir nei Felder bäidréit.
  • Dobäigesat d'Fähegkeet de prozedural Macro Mac ze ruffen!() an engem Typ Kontext. Zum Beispill kënnt Dir elo "Typ Foo = expand_to_type!(Bar);" schreiwen wann "expand_to_type" e prozedurale Makro ass.
  • An "extern { ... }" Blocken dobäi d'Kapazitéit fir prozedural an Attributer Makroen ze benotzen, dorënner "Bang!()" Makroen, zum Beispill:

    makro_regelen! make_item {($name:ident) => {fn $name(); } }

    extern {
    make_item!(alpha);
    make_item!(beta);
    }

    extern "C" {
    #[my_identity_macro] fn foo();
    }

  • An Makroen ëmgesat Fäegkeet "macro_rules!"Elementer ze generéieren. Generéiere "Macro_rules!" méiglech souwuel a Funktiounsähnleche Makroen ("mac!()") an a Makroen a Form vun Attributer ("#[mac]").
  • Am $m:meta Mapping Element dobäi Ënnerstëtzung fir arbiträr Token Enumeratioun Wäerter ("[TOKEN_STREAM]", "{TOKEN_STREAM}" an "(TOKEN_STREAM)"), zum Beispill:

    makro_regelen! accept_meta {($m:meta) => {} }
    accept_meta!(mäi :: Wee);
    accept_meta!(my::path = "lit");
    accept_meta!(mäi :: Wee (abc));
    accept_meta!(mäi :: Wee [abc]);
    accept_meta!(mäi :: Wee {abc});

  • Am Rust 2015 Modus ass d'Fehlerausgang aktivéiert fir Probleemer, déi identifizéiert ginn wann Dir d'Prêt vu Variablen iwwerpréift (léinen Checker) mat der NLL (Non-Lexical Lifetimes) Technik. Virdrun goufen Warnungen duerch Feeler ersat wann se am Rust 2018 Modus lafen.
    Nodeems d'Ännerung op de Rust 2015 Modus verlängert gouf, konnten d'Entwéckler endlech ze läschen vum ale Prêt Checker.

    Loosst eis drun erënneren datt de Verifizéierungssystem baséiert op engem neie Mechanismus fir d'Liewensdauer vu geléinte Variablen ze berücksichtegen et méiglech gemaach huet e puer Probleemer z'identifizéieren, déi vum alen Verifizéierungscode net bemierkt ginn. Zënter Feelerausgang fir sou Kontrollen kéint d'Kompatibilitéit mam virdru funktionnéierende Code beaflossen, goufen Warnungen amplaz vu Feeler ausgestallt.

  • D'"const" Attribut, déi d'Méiglechkeet bestëmmt et an all Kontext ze benotzen anstatt Konstanten, gëtt fir d'is_power_of_two Funktioun benotzt (fir net ënnerschriwwen ganz Zuelen).
  • En neien Deel vun der API gouf an déi stabil Kategorie geplënnert, dorënner de Todo!() Makro an de Slice :: widderhuelen, mem :: take, BTreeMap :: get_key_value, HashMap :: get_key_value, Methode goufen stabiliséiert.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32} f64}::from_be_bytes, {f32,f64}::from_le_bytes, an {f32,f64}::from_ne_bytes.

  • Am Pak Manager cargo
    ëmgesat Caching Compiler Warnungen op Disk. D'Optioun "Cargo Metadaten" op de Kommando "Cargo Metadaten" bäigefüügt--Filter-Plattform" fir nëmmen Packagen ze weisen, déi un der spezifizéierter Zilplattform gebonnen sinn an der Ofhängegkeetsresolutiounskolonn. Added http.ssl-version Configuration Optioun fir valabel TLS Versiounen ze definéieren.
    D'Fäegkeet bäigefüügt fir d'Sektioun ze publizéieren "dev-Ofhängegkeeten" ouni de "Versioun" Schlëssel ze spezifizéieren.

  • De Rustc Compiler bitt drëtt Niveau Ënnerstëtzung fir Zilplattformen thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 an mips64el-unknown-linux-muslabi64. Den drëtten Niveau beinhalt Basis Ënnerstëtzung, awer ouni automatiséiert Testen a Verëffentlechung vun offiziellen Builds.

Source: opennet.ru

Setzt e Commentaire