Rust 1.39 programmeringsspråkutgivelse

publisert utgivelse av systemprogrammeringsspråk Rust 1.39, grunnlagt av Mozilla-prosjektet. Språket fokuserer på minnesikkerhet, gir automatisk minnehåndtering og gir et middel til å oppnå høy oppgaveparallellisme uten å bruke en søppeloppsamler eller kjøretid.

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:

  • Stabilisert en ny asynkron programmeringssyntaks basert på "async"-funksjonen, async move { ... }-blokken og ".await"-operatoren, som gjør det lettere å skrive behandlere som ikke blokkerer hovedkommandoflyten. Sammenlignet med tidligere tilbudte API for asynkron I/O, er async/.await-konstruksjoner enkle å forstå, svært lesbare og lar deg implementere komplekse asynkrone interaksjoner ved å bruke kjente flytkontrollteknikker basert på løkker, betingede utsagn og unntak.

    Async-ait-syntaksen lar deg lage funksjoner som kan sette kjøringen på pause, returnere kontrollen til hovedtråden og deretter gjenoppta kjøringen der de slapp. For eksempel kreves en slik pause ved behandling av I/O, der annet arbeid kan gjøres mens man venter på at neste data skal ankomme. Funksjoner og blokker definert med "async fn" og "async move" returnerer en egenskap Future, som definerer en utsatt asynkron beregningsrepresentasjon. Du kan starte en utsatt beregning direkte og få resultatet ved å bruke ".await"-operatoren. Ingen handling utføres eller forhåndsplanlegges før .await kalles, slik at komplekse nestede konstruksjoner kan opprettes uten ekstra overhead.

    async fn first_function() -> u32 { .. }
    ...
    la fremtid = første_funksjon();
    ...
    la resultat: u32 = future.await;

  • Stabilisert "#![feature(bind_by_move_pattern_guards)]", som tillater bruk av variabler med bindingstypen "ved bevegelse" i maler og bruk referanser til disse variablene i "hvis"-delen av uttrykket "kamp". For eksempel er følgende konstruksjoner nå tillatt:

    fn main() {
    let array: Box<[u8; 4]> = Boks::ny([1, 2, 3, 4]);

    match array {
    tall
    hvis nums.iter().sum::() == 10

    => {
    drop(nums);
    }
    _ => utilgjengelig!(),
    }
    }

  • Indikasjon tillatt attributter når du definerer funksjonsparametere, lukkinger og funksjonspekere. Betingede kompileringsattributter (cfg, cfg_attr) som styrer diagnostikk via lint (tillate, advare, nekte og forby) og hjelpemakrokallingsattributter støttes.

    fn len(
    #[cfg(windows)] skive: &[u16], // bruk parameteren på Windows
    #[cfg(not(windows))] skive: &[u8], // bruk i andre OS
    ) -> bruk {
    slice.len()
    }

  • Advarsler om problemer identifisert ved kontroll av lån av variabler (lånekontroll) ved bruk av NLL-teknikken (Non-Lexical Lifetimes), oversatt inn i kategorien fatale feil. 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. Advarsler er nå erstattet med feil ved kjøring i Rust 2018-modus. I neste utgivelse vil feilutgang også implementeres i Rust 2015-modus, som endelig vil bli kvitt den gamle lånekontrollen;
  • «const»-attributtet, som bestemmer muligheten for bruk i enhver kontekst i stedet for konstanter, brukes for funksjonene Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrapping_abs og overflowing_abs;

  • En ny del av API-er er overført til stabil-kategorien, inkludert metoder som er stabilisert
    Pin::into_inner, Instant::checked_duration_since og Instant::saturating_duration_since;

  • Lastepakkebehandleren har nå muligheten til å bruke ".toml"-utvidelsen for konfigurasjonsfiler. Lagt til foreløpig støtte for å bygge standardbiblioteket direkte fra Cargo. Lagt til "--workspace"-flagget, og erstattet det kontroversielle "--all"-flagget. Et nytt felt er lagt til metadataene "publisere", som lar deg publisere avhengigheter ved å spesifisere en git-tag og versjonsnummer. Lagt til testalternativ "-Ztimings" for å generere en HTML-rapport over utførelsestidene for ulike kompileringsstadier.
  • I rustc-kompilatoren inkluderer diagnostiske meldinger trimming av koden som ikke passer inn i terminalen. Tilbyr tredje nivå av støtte for målplattformer
    i686-unknown-uefi og sparc64-unknown-openbsd. 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