Rust 1.44 programmeringsspråkutgivelse

publisert utgivelse av systemprogrammeringsspråk Rust 1.44, 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 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, 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.

I teksten til kunngjøringen av den nye utgivelsen ble Rust-utviklerne involvert i politikk og nektet på det sterkeste å publisere en fullstendig gjennomgang av endringene i Rust 1.44 som et tegn på solidaritet med demonstranter mot politivold, noe som indikerer at denne saken er viktigere enn utveksling av teknisk kunnskap. Grunnleggende innovasjoner:

  • Lastepakkebehandleren integrerer kommandoen "lasttre", som viser en trelignende avhengighetsgraf. Alternativet "—duplicates" ("lasttre -d") er også lagt til, som lar deg evaluere avhengigheter i forskjellige versjoner av samme pakke.

    mdbook v0.3.2 (/Users/src/rust/mdbook)
    ├── ammoniakk v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── logg v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── markup5ever v0.9.0
    │ │ ├── logg v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── siphasher v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [byggavhengigheter] │ │ │ └── versjonssjekk v0.1.5
    ...

  • For applikasjoner som ikke er bundet til en std ("#![no_std]"), er støtte for asynkrone programmeringsteknikker implementert basert på "async"-funksjonen, async move { ... }-blokken og ".await"-operatoren, som forenkle skriving av ikke-blokkerende håndterers hovedkommandoflyt.
  • Støtte for et utvidbart modulhierarkidefinisjonsskjema er lagt til parseren. For eksempel vil den følgende konstruksjonen ikke produsere en feil, til tross for det faktiske fraværet av modulen "foo/bar/baz.rs" (konstruksjonen er fortsatt semantisk ugyldig og kan forårsake en feil, men endringene kan sees og analyseres på makro- og betinget kompileringsnivå):

    #[cfg(FALSE)] mod foo {
    mod bar {
    mod baz;
    }
    }

  • Rustc-kompilatoren har lagt til muligheten til å bruke "-C codegen-units"-flagget i inkrementell modus. Implementeringen av catch_unwind har blitt omarbeidet slik at den ikke har noen ytelseseffekt hvis avviklingsprosessen er deaktivert og ingen unntak blir kastet.
  • Nivå 64-støtte er gitt for plattformene aarch64-unknown-none, aarch64-unknown-none-softfloat, arm86-apple-tvos og x64_XNUMX-apple-tvos. Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing og publisering av offisielle bygg.
  • En ny del av API-er er overført til stabil-kategorien, inkludert stabiliserte
    PathBuf::with_capacity,
    PathBuf::capacity,
    PathBuf::clear,
    PathBuf::reserve,
    PathBuf::reserve_exact,
    PathBuf::shrink_to_fit,
    {f32|f64}::to_int_unchecked,
    Layout::align_to,
    Layout::pad_to_align,
    Layout::array og
    Layout::extend.

  • Utvidede funksjoner til standardbiblioteket:
    • Lagt til en spesiell "vec![]"-variant som er direkte reflektert i Vec::new(), slik at "vec![]" kan brukes i kontekst i stedet for konstanter.
    • En implementering (impl) av egenskapen er lagt til for å konvertere::Infallible Hash.
    • OsString implementerer smarte pekere DerefMut и IndexMut, returnerer "&mut OsStr".
    • Lagt til støtte for Unicode 13.
    • Implementert i String Fra<&mut str>.
    • IoSlice implementerer egenskapen Kopier.
    • Vec implementert Fra<[T; N]>.
    • proc_macro::LexError implementerer fmt::Display og Error.
  • «const»-attributtet, som bestemmer om det kan brukes i en hvilken som helst kontekst i stedet for konstanter, brukes i metodene from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes og to_ne_bytes metodene for alle heltallstyper.
  • Lagt til støtte for generering av statiske biblioteker i ".a"-format i stedet for ".lib" for GNU-plattformer på Windows.
  • Minimumskravene for LLVM er hevet til LLVM versjon 8.

Kilde: opennet.ru

Legg til en kommentar