Rust 1.44 programmeringssprog udgivelse

offentliggjort frigivelse af systemprogrammeringssprog Rust 1.44, grundlagt af Mozilla-projektet. Sproget fokuserer på hukommelsessikkerhed, giver automatisk hukommelsesstyring og giver værktøjer til at opnå høj opgaveparallelisme uden at bruge en skraldeopsamler og runtime.

Rusts automatiske hukommelsesstyring eliminerer fejl ved manipulation af pointere og beskytter mod problemer, der opstår fra manipulation af hukommelsen på lavt niveau, såsom adgang til en hukommelsesregion, efter at den er blevet frigivet, nul pointer-dereferencer, bufferoverskridelser osv. En pakkemanager er ved at blive udviklet til at distribuere biblioteker, sikre samling og administrere afhængigheder af projektet. Last, som giver dig mulighed for at få de biblioteker, du skal bruge til programmet, med et enkelt klik. Et lager er understøttet til at være vært for biblioteker kasser.io.

I teksten til annonceringen af ​​den nye udgivelse blev Rust-udviklerne involveret i politik og nægtede på det kraftigste at offentliggøre en fuldstændig gennemgang af ændringerne i Rust 1.44 som et tegn på solidaritet med demonstranter mod politivold, hvilket indikerer, at dette spørgsmål er vigtigere end udveksling af teknisk viden. Grundlæggende innovationer:

  • Cargo-pakkehåndteringen integrerer kommandoen "cargo tree", som viser en trælignende afhængighedsgraf. Også tilføjet er muligheden "—duplicates" ("cargo tree -d"), som giver dig mulighed for at evaluere afhængigheder i forskellige versioner af den samme pakke.

    mdbook v0.3.2 (/Users/src/rust/mdbook)
    ├── ammoniak v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── log v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── markup5ever v0.9.0
    │ │ ├── log v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── siphasher v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [build-afhængigheder] │ │ │ └── version_check v0.1.5
    ...

  • For applikationer, der ikke er bundet til en std ("#![no_std]"), er understøttelse af asynkrone programmeringsteknikker implementeret baseret på "async"-funktionen, async move { ... }-blokken og ".await"-operatoren, som forenkle skrivning af ikke-blokerende handlers hovedkommandoflow.
  • Understøttelse af et udvideligt modulhierarkidefinitionsskema er blevet tilføjet til parseren. For eksempel vil følgende konstruktion ikke producere en fejl, på trods af det faktiske fravær af modulet "foo/bar/baz.rs" (konstruktionen er stadig semantisk ugyldig og kan forårsage en fejl, men ændringerne kan ses og analyseres på makro- og betinget kompileringsniveau):

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

  • Rustc-kompileren har tilføjet muligheden for at bruge flaget "-C codegen-units" i inkrementel tilstand. Implementeringen af ​​catch_unwind er blevet omarbejdet, så det ikke har nogen effekt på ydeevnen, hvis afviklingsprocessen er deaktiveret, og der ikke er nogen undtagelser.
  • Niveau 64-understøttelse er blevet leveret til platformene aarch64-unknown-none, aarch64-unknown-none-softfloat, arm86-apple-tvos og x64_XNUMX-apple-tvos. Det tredje niveau involverer grundlæggende support, men uden automatiseret test og offentliggørelse af officielle builds.
  • En ny del af API'er er blevet overført til den stabile kategori, inklusive stabiliseret
    PathBuf::with_capacity,
    PathBuf::kapacitet,
    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.

  • Udvidede funktioner i standardbiblioteket:
    • Tilføjet en speciel "vec![]"-variant, der er direkte afspejlet i Vec::new(), hvilket gør det muligt at bruge "vec![]" i kontekst i stedet for konstanter.
    • En implementering (impl) af egenskaben er blevet tilføjet for at konvertere::Infallible Hash.
    • OsString implementerer smarte pointere DerefMut и IndexMut, returnerer "&mut OsStr".
    • Tilføjet understøttelse af Unicode 13.
    • Implementeret i String Fra<&mut str>.
    • IoSlice implementerer egenskaben Kopi.
    • Vec implementeret Fra<[T; N]>.
    • proc_macro::LexError implementerer fmt::Display og Error.
  • Attributten "const", som bestemmer, om den kan bruges i en hvilken som helst kontekst i stedet for konstanter, bruges i metoderne from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes og to_ne_bytes metoder for alle heltaltyper.
  • Tilføjet understøttelse til generering af statiske biblioteker i ".a"-format i stedet for ".lib" til GNU-platforme på Windows.
  • Minimumskravene til LLVM er blevet hævet til LLVM version 8.

Kilde: opennet.ru

Tilføj en kommentar