Rust 1.40 programmeringsspråkutgivelse

publisert utgivelse av systemprogrammeringsspråk Rust 1.40, grunnlagt av Mozilla-prosjektet. Språket fokuserer på minnesikkerhet, gir automatisk minnehåndtering og gir verktøy for å oppnå høy oppgaveparallellisme uten å bruke en søppeloppsamler og runtime.

Rusts automatiske minnebehandling frigjør utvikleren fra pekermanipulasjon og beskytter mot problemer som oppstår fra lavnivå minnemanipulering, for eksempel etterfrie minnetilganger, null-pekerdereferanser, bufferoverskridelser og lignende. En pakkebehandler utvikles for å distribuere biblioteker, sikre montering og administrere avhengigheter av prosjektet. Cargo, slik at du kan få bibliotekene som trengs for programmet med ett klikk. Et depot støttes for å være vert for biblioteker kasser.io.

Den viktigste innovasjoner:

  • Lagt til muligheten til å merke strukturer (struct) og oppregninger (enum med Variant-blokk) ved å bruke attributtet "#[ikke_uttømmende]", hvilken den lar i fremtiden, legg til nye felt og alternativer til deklarerte strukturer og oppregninger. For eksempel kan utviklere av moduler som har strukturer med offentlig deklarerte felt bruke "#[non_exhaustive]" for å merke strukturer som kan ha nye felt lagt til i fremtiden. Inntil nå, i denne situasjonen, ble utvikleren tvunget til å velge mellom å deklarere felt privat og å binde seg til en uforanderlig liste over felt. Det nye attributtet fjerner denne begrensningen og lar deg legge til nye felt i fremtiden uten risiko for å bryte tidligere kompilert ekstern kode. I kassepakker kreves det en eksplisitt definisjon av masken "_ => {...}" når alternativer i "match"-delen samsvarer, som dekker mulige fremtidige felt, ellers vil en feil vises når nye felt legges til.
  • La til muligheten til å kalle den prosessuelle makroen mac!() i en typekontekst. For eksempel kan du nå skrive "type Foo = expand_to_type!(bar);" hvis "expand_to_type" er en prosedyremakro.
  • I "ekstern { ... }" blokker la til muligheten til å bruke prosedyre- og attributtmakroer, inkludert "bang!()"-makroer, for eksempel:

    makro_regler! make_item { ($navn:ident) => { fn $navn(); } }

    ekstern {
    make_item!(alfa);
    make_item!(beta);
    }

    ekstern "C" {
    #[min_identitet_makro] fn foo();
    }

  • I makroer implementert evne til å generere "macro_rules!"-elementer. Genererer "makro_regler!" mulig både i funksjonslignende makroer (“mac!()”) og i makroer i form av attributter (“#[mac]”).
  • I $m:meta-tilordningselementet la til støtte for vilkårlige token-oppregningsverdier ("[TOKEN_STREAM]", "{TOKEN_STREAM}" og "(TOKEN_STREAM)"), for eksempel:

    makro_regler! accept_meta { ($m:meta) => {} }
    accept_meta!( min::bane );
    accept_meta!( min::path = "lit" );
    accept_meta!( min::bane ( a b c ) );
    accept_meta!( min::bane [ a b c ] );
    accept_meta!( min::bane { a b c } );

  • I Rust 2015-modus er feilutgang aktivert for problemer identifisert ved kontroll av lån av variabler (lånekontroll) ved hjelp av NLL-teknikken (Non-Lexical Lifetimes). Tidligere ble advarsler erstattet med feil ved kjøring i Rust 2018-modus.
    Etter at endringen ble utvidet til Rust 2015-modus, kunne utviklere endelig bli kvitt fra den gamle lånebrikken.

    La oss huske at verifikasjonssystemet basert på en ny mekanisme for å ta hensyn til levetiden til lånte variabler gjorde det mulig å identifisere noen problemer som gikk ubemerket av den gamle verifikasjonskoden. Siden feilutdata for slike kontroller kan påvirke kompatibiliteten med tidligere fungerende kode, ble det opprinnelig utstedt advarsler i stedet for feil.

  • «const»-attributtet, som bestemmer muligheten for å bruke det i enhver kontekst i stedet for konstanter, brukes for funksjonen is_power_of_two (for heltall uten fortegn).
  • En ny del av API-en har blitt flyttet til den stabile kategorien, inkludert todo!()-makroen og slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metodene har blitt stabilisert.
    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} f32}::from_be_bytes, {f64,f32}::from_le_bytes og {f64,fXNUMX}::from_ne_bytes.

  • I pakkeforvalter last
    implementert caching kompilator advarsler på disk. Lagt til alternativet "lastmetadata" til kommandoen "lastmetadata".--filter-plattform" for å vise bare pakker bundet til den angitte målplattformen i kolonnen for avhengighetsoppløsning. Lagt til http.ssl-versjonskonfigurasjonsalternativ for å definere gyldige TLS-versjoner.
    Lagt til muligheten til å publisere delen "utviklingsavhengigheter" uten å spesifisere "versjon"-nøkkelen.

  • Rustc-kompilatoren gir støtte på tredje nivå for målplattformer thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 og mips64el-unknown-linux-muslabi64. Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing og publisering av offisielle bygg.

Kilde: opennet.ru

Legg til en kommentar