Rust 1.40 programmeertaal release

gepubliceerd systeem programmeertaal release Roest 1.40, opgericht door het Mozilla-project. De taal richt zich op geheugenveiligheid, biedt automatisch geheugenbeheer en biedt hulpmiddelen voor het bereiken van hoge taakparallelliteit zonder gebruik te maken van een garbage collector en runtime.

Het automatische geheugenbeheer van Rust bevrijdt de ontwikkelaar van pointermanipulatie en beschermt tegen problemen die voortkomen uit geheugenmanipulatie op laag niveau, zoals after-free geheugentoegang, null pointer-dereferenties, bufferoverruns en dergelijke. Er wordt een pakketbeheerder ontwikkeld om bibliotheken te distribueren, de assemblage te garanderen en de afhankelijkheden van het project te beheren. Cargo, zodat u met één klik de bibliotheken kunt verkrijgen die nodig zijn voor het programma. Er wordt een repository ondersteund om bibliotheken te hosten kratten.io.

De belangrijkste innovaties:

  • De mogelijkheid toegevoegd om structuren (struct) en opsommingen (enum met variantblok) te markeren met behulp van het attribuut "#[niet_uitputtend]", welke laat Voeg in de toekomst nieuwe velden en opties toe aan gedeclareerde structuren en opsommingen. Ontwikkelaars van modules die structuren hebben met publiekelijk gedeclareerde velden kunnen bijvoorbeeld "#[non_exhaustive]" gebruiken om structuren te markeren waaraan in de toekomst mogelijk nieuwe velden worden toegevoegd. Tot nu toe moest de ontwikkelaar in deze situatie kiezen tussen het privé declareren van velden of het binden aan een onveranderlijke lijst met velden. Met het nieuwe attribuut wordt deze beperking opgeheven en kunt u in de toekomst nieuwe velden toevoegen zonder het risico te lopen dat eerder gecompileerde externe code wordt verbroken. In kratpakketten is bij het matchen van opties in de sectie "match" een expliciete definitie van het masker "_ => {...}" vereist, dat mogelijke toekomstige velden dekt, anders wordt er een fout weergegeven bij het toevoegen van nieuwe velden.
  • Toegevoegd de mogelijkheid om de procedurele macro mac!() aan te roepen in een typecontext. U kunt nu bijvoorbeeld “type Foo = expand_to_type!(bar);” schrijven als “expand_to_type” een procedurele macro is.
  • In "externe { ... }" blokken toegevoegd de mogelijkheid om procedurele en attribuutmacro's te gebruiken, inclusief "bang!()"-macro's, bijvoorbeeld:

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

    extern {
    make_item!(alfa);
    make_item!(bèta);
    }

    externe "C" {
    #[mijn_identiteit_macro] fn foo();
    }

  • Bij macro's geïmplementeerd mogelijkheid om “macro_rules!”-elementen te genereren. Het genereren van "macro_rules!" mogelijk zowel in functieachtige macro's (“mac!()”) als in macro's in de vorm van attributen (“#[mac]”).
  • In het $m:meta-toewijzingselement toegevoegd ondersteuning voor willekeurige tokenopsommingswaarden ("[TOKEN_STREAM]", "{TOKEN_STREAM}" en "(TOKEN_STREAM)"), bijvoorbeeld:

    macro_regels! accept_meta { ($m:meta) => {} }
    accept_meta!( mijn::pad);
    accept_meta!( mijn::pad = "verlicht");
    accept_meta!( mijn::pad (abc));
    accept_meta!( mijn::pad [ abc ]);
    accept_meta!( mijn::pad { abc });

  • In de Rust 2015-modus is foutuitvoer ingeschakeld voor problemen die zijn geïdentificeerd bij het controleren van het lenen van variabelen (lenencontrole) met behulp van de NLL-techniek (Non-Lexical Lifetimes). Voorheen werden waarschuwingen vervangen door fouten bij het uitvoeren van de Rust 2018-modus.
    Nadat de wijziging was uitgebreid naar de Rust 2015-modus, konden ontwikkelaars eindelijk dit doen ontsnappen van de oude leencontrole.

    Laten we niet vergeten dat het verificatiesysteem, gebaseerd op een nieuw mechanisme om rekening te houden met de levensduur van geleende variabelen, het mogelijk maakte enkele problemen te identificeren die onopgemerkt bleven door de oude verificatiecode. Omdat de foutuitvoer bij dergelijke controles de compatibiliteit met eerder werkende code zou kunnen beïnvloeden, werden er aanvankelijk waarschuwingen gegeven in plaats van fouten.

  • Het attribuut “const”, dat de mogelijkheid bepaalt om het in elke context te gebruiken in plaats van constanten, wordt gebruikt voor de functie is_power_of_two (voor gehele getallen zonder teken).
  • Een nieuw deel van de API is verplaatst naar de stabiele categorie, inclusief de todo!() macro en de slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, methoden zijn gestabiliseerd.
    Optie::as_deref, Optie::as_deref_mut, Optie::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::van_be_bytes, {f32,f64}::van_le_bytes, en {f32,f64}::van_ne_bytes.

  • In de pakketbeheerder vracht
    geïmplementeerd caching van compilerwaarschuwingen op schijf. De optie "vrachtmetagegevens" toegevoegd aan het commando "vrachtmetagegevens".--filter-platform" om alleen pakketten weer te geven die zijn gebonden aan het opgegeven doelplatform in de kolom voor het oplossen van afhankelijkheid. Configuratieoptie http.ssl-version toegevoegd om geldige TLS-versies te definiëren.
    De mogelijkheid toegevoegd om de sectie te publiceren "dev-afhankelijkheden" zonder de sleutel "versie" op te geven.

  • De rustc-compiler biedt ondersteuning op het derde niveau voor doelplatforms thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 en mips64el-unknown-linux-muslabi64. Het derde niveau omvat basisondersteuning, maar zonder geautomatiseerd testen en publiceren van officiële builds.

Bron: opennet.ru

Voeg een reactie