Rust 1.47 programmeringsspråkutgivelse

publisert utgivelse 1.47 av systemprogrammeringsspråket Rust, grunnlagt av Mozilla-prosjektet. Språket fokuserer på minnesikkerhet, gir automatisk minnehåndtering og gir et middel til å oppnå høy oppgaveparallellisme uten bruk søppelmann и runtime (runtime koker ned til grunnleggende initialisering og vedlikehold av standardbiblioteket).

Rusts automatiske minnebehandling eliminerer feil ved manipulering av pekere og beskytter mot problemer som oppstår fra lavnivå minnemanipulering, som tilgang til et minneområde etter at det har blitt frigjort, null-pekereferanser, bufferoverskridelser, etc. En pakkebehandler utvikles for å distribuere biblioteker, sikre montering og administrere avhengigheter av prosjektet. Cargo. Et depot støttes for å være vert for biblioteker kasser.io.

Den viktigste innovasjoner:

  • Implementert støtte for typer matriser hvilken som helst størrelse. Tidligere, på grunn av manglende evne til å definere generiske funksjoner for alle heltallsverdier, ga standardbiblioteket innebygd trekkstøtte bare for arrays opp til 32 elementer i størrelse (trekkene for hver størrelse var statisk definert). Takket være opprettelsen av funksjonaliteten til konstante generikk ("const generics"), ble det mulig å definere generiske funksjoner for en hvilken som helst matrisestørrelse, men de er ennå ikke inkludert i de stabile språkfunksjonene, selv om de er implementert i kompilatoren og er nå involvert i standardbiblioteket for matrisetrekk av alle størrelser.

    For eksempel vil følgende konstruksjon i Rust 1.47 skrive ut innholdet i en matrise, selv om det tidligere ville ha resultert i en feil:

    fn main() {
    la xs = [0; 34];

    println!("{:?}", xs);
    }

  • Forutsatt utgang av kortere spor (backtrace), utgang i nødssituasjoner. Elementer som ikke er av interesse i de fleste situasjoner, men som roterer utdataene og distraherer oppmerksomheten fra de primære årsakene til problemet, ekskluderes fra sporet. For å returnere en full sporing kan du bruke miljøvariabelen "RUST_BACKTRACE=full". For eksempel for koden

    fn main() {
    panikk!();
    }

    Tidligere ble sporet lagt ut i 23 trinn, men nå skal det reduseres til
    3 trinn som lar deg umiddelbart forstå essensen:

    tråden 'main' fikk panikk ved 'eksplisitt panikk', src/main.rs:2:5
    stabel tilbakesporing:
    0: std::panikk::begynn_panikk
    på /rustc/d…d75a/library/std/src/panicking.rs:497
    1: lekeplass::hoved
    på ./src/main.rs:2
    2: kjerne::ops::funksjon::FnOnce::call_once
    på /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Rustc-kompilatoren har blitt oppdatert for å bygge med LLVM 11 (Rust bruker LLVM som backend for kode generering). Samtidig beholdes muligheten til å bygge med eldre LLVM-er, opp til versjon 8, men som standard (i rust-lang/llvm-prosjekt) bruker nå LLVM 11. LLVM 11 forventes å bli utgitt i løpet av de kommende dagene.
  • På Windows-plattformen gir rustc-kompilatoren støtte for å aktivere kontrollflytintegritetskontroller (Control Flow Guard), aktivert ved hjelp av "-C control-flow-guard"-flagget. På andre plattformer ignoreres dette flagget foreløpig.
  • En ny del av API-er er overført til stabil-kategorien, inkludert stabiliserte
    Ident::new_raw,
    Range::is_empty,
    RangeInclusive::is_empty,
    Resultat::as_deref,
    Resultat::as_deref_mut,
    Vec::lekkasje,
    pointer::offset_from,
    f32::TAU og
    f64::TAU.

  • «const»-attributtet, som bestemmer muligheten for å bruke det i enhver kontekst i stedet for konstanter, brukes i metodene:
    • ny for alle heltall bortsett fra null;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub og saturating_mul for alle heltall;
    • is_ascii_alphabetic, is_ascii_storecase, is_ascii_small, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_interpunctuation, is_ascii_graphic, is_ascii_whitespace og is_ascii_types for char
  • For FreeBSD involvert verktøysett fra FreeBSD 11.4 (FreeBSD 10 støtter ikke LLVM 11).

Kilde: opennet.ru

Legg til en kommentar