Rust 1.47 programmeringssprog udgivelse

offentliggjort udgivelse 1.47 af systemets programmeringssprog Rust, grundlagt af Mozilla-projektet. Sproget fokuserer på hukommelsessikkerhed, giver automatisk hukommelsesstyring og giver et middel til at opnå høj opgaveparallelisme uden brug skraldemand и runtime (runtime koger ned til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

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. Et lager er understøttet til at være vært for biblioteker kasser.io.

The main innovationer:

  • Implementeret support til typer arrays enhver størrelse. Tidligere, på grund af manglende evne til at definere generiske funktioner for alle heltalværdier, gav standardbiblioteket kun indbygget egenskabsunderstøttelse for arrays op til 32 elementer i størrelse (egenskaberne for hver størrelse var statisk defineret). Takket være oprettelsen af ​​funktionaliteten af ​​konstante generiske artikler (“const generics”) blev det muligt at definere generiske funktioner for enhver arraystørrelse, men de er endnu ikke inkluderet i de stabile sprogfunktioner, selvom de er implementeret i compileren og er nu involveret i standardbiblioteket for array-træk af enhver størrelse.

    For eksempel vil følgende konstruktion i Rust 1.47 udskrive indholdet af et array, selvom det tidligere ville have resulteret i en fejl:

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

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

  • Forudsat output af kortere spor (backtrace), output i nødsituationer. Elementer, der ikke er af interesse i de fleste situationer, men rod i outputtet og distraherer opmærksomheden fra de primære årsager til problemet, udelukkes fra sporet. For at returnere en fuld sporing kan du bruge miljøvariablen "RUST_BACKTRACE=full". For eksempel for koden

    fn main() {
    panik!();
    }

    Tidligere blev sporet udgivet i 23 trin, men nu vil det blive reduceret til
    3 trin, der giver dig mulighed for straks at forstå essensen:

    tråden 'main' gik i panik ved 'eksplicit panik', src/main.rs:2:5
    stak tilbagesporing:
    0: std::panik::begynd_panik
    på /rustc/d…d75a/library/std/src/panicking.rs:497
    1: legeplads::hoved
    på ./src/main.rs:2
    2: kerne::ops::funktion::FnOnce::call_once
    på /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Rustc-kompileren er blevet opdateret til at bygge vha LLVM 11 (Rust bruger LLVM som backend til kodegenerering). Samtidig bevares muligheden for at bygge med ældre LLVM'er, op til version 8, men som standard (i rust-lang/llvm-projekt) bruger nu LLVM 11. LLVM 11 forventes at blive frigivet i de kommende dage.
  • På Windows-platformen giver rustc-kompileren support til at aktivere kontrolflowintegritetstjek (Control Flow Guard), aktiveret ved hjælp af flaget "-C control-flow-guard". På andre platforme ignoreres dette flag indtil videre.
  • En ny del af API'er er blevet overført til den stabile kategori, inklusive stabiliseret
    Ident::new_raw,
    Range::er_tom,
    RangeInclusive::is_empty,
    Resultat::as_deref,
    Resultat::as_deref_mut,
    Vec::lækage,
    pointer::offset_from,
    f32::TAU og
    f64::TAU.

  • "const"-attributten, som bestemmer muligheden for at bruge den i enhver sammenhæng i stedet for konstanter, bruges i metoderne:
    • ny for alle heltal bortset fra nul;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub og saturating_mul for alle heltal;
    • er_ascii_alfabetisk, is_ascii_store bogstaver, is_ascii_små bogstaver, is_ascii_alfanumerisk, is_ascii_digit, is_ascii_hexdigit, is_ascii_interpunctuation, is_ascii_graphic, is_ascii_whitespace og is_ascii_typer for char og u8 typer
  • Til FreeBSD involveret værktøjssæt fra FreeBSD 11.4 (FreeBSD 10 understøtter ikke LLVM 11).

Kilde: opennet.ru

Tilføj en kommentar