Rust 1.47 programspråk release

publiceras version 1.47 av systemets programmeringsspråk Rust, grundat av Mozilla-projektet. Språket fokuserar på minnessäkerhet, tillhandahåller automatisk minneshantering och ger ett sätt att uppnå hög uppgiftsparallellism utan att använda skräp samlare и runtime (runtime kokar ner till grundläggande initiering och underhåll av standardbiblioteket).

Rusts automatiska minneshantering räddar utvecklaren från fel vid manipulering av pekare och skyddar mot problem som uppstår på grund av minnesmanipulation på låg nivå, som att komma åt ett minnesområde efter det att det har frigjorts, avläsning av nollpekare, buffertöverskridningar, etc. För att distribuera bibliotek, säkerställa montering och hantera beroenden utvecklar projektet en pakethanterare Laddning. Ett arkiv stöds för värdbibliotek lådor.io.

Den huvudsakliga innovationer:

  • Implementerat stöd för typer matriser vilken storlek som helst. Tidigare, på grund av oförmågan att definiera generiska funktioner för alla heltalsvärden, gav standardbiblioteket inbyggt dragstöd endast för arrayer upp till 32 element i storlek (dragen för varje storlek definierades statiskt). Tack vare skapandet av funktionaliteten för konstanta generika ("const generics") blev det möjligt att definiera generiska funktioner för vilken arraystorlek som helst, men de är ännu inte inkluderade i de stabila språkfunktionerna, även om de är implementerade i kompilatorn och nu inblandade i standardbiblioteket för arrayegenskaper av alla storlekar.

    Till exempel kommer följande konstruktion i Rust 1.47 att skriva ut innehållet i en array, även om det tidigare skulle ha resulterat i ett fel:

    fn main() {
    låt xs = [0; 34];

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

  • Tillhandahålls utgång av kortare spår (backtrace), utgång i nödsituationer. Element som inte är av intresse i de flesta situationer, men som stör utmatningen och distraherar uppmärksamheten från de primära orsakerna till problemet, utesluts från spåret. För att returnera en fullständig spårning kan du använda miljövariabeln "RUST_BACKTRACE=full". Till exempel för koden

    fn main() {
    panik!();
    }

    Tidigare har spåret matats ut i 23 steg, men nu ska det reduceras till
    3 steg som låter dig omedelbart förstå essensen:

    tråden 'main' fick panik vid 'explicit panic', src/main.rs:2:5
    stack bakåtspårning:
    0: std::panik::begin_panic
    på /rustc/d…d75a/library/std/src/panicking.rs:497
    1: lekplats::main
    på ./src/main.rs:2
    2: kärna::ops::funktion::FnOnce::call_once
    på /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Rustc-kompilatorn har uppdaterats för att bygga med LLVM 11 (Rost användningsområden LLVM som backend för kodgenerering). Samtidigt behålls möjligheten att bygga med äldre LLVM, upp till version 8, men som standard (i rust-lang/llvm-projekt) använder nu LLVM 11. LLVM 11 förväntas släppas inom de kommande dagarna.
  • På Windows-plattformen ger rustc-kompilatorn stöd för att möjliggöra kontroller av kontrollflödesintegritet (Control Flow Guard), aktiverad med flaggan "-C control-flow-guard". På andra plattformar ignoreras denna flagga för närvarande.
  • En ny del av API har överförts till kategorin stabil, inklusive stabiliserad
    Ident::new_raw,
    Range::is_empty,
    RangeInclusive::is_empty,
    Resultat::as_deref,
    Resultat::as_deref_mut,
    Vec::läcka,
    pointer::offset_from,
    f32::TAU och
    f64::TAU.

  • Attributet "const", som bestämmer möjligheten att använda det i alla sammanhang istället för konstanter, används i metoderna:
    • ny för alla heltal förutom noll;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub och saturating_mul för alla heltal;
    • is_ascii_alphabetic, is_ascii_versaler, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_interpunctuation, is_ascii_graphic, is_ascii_whitespace och is_ascii-typer för char
  • För FreeBSD inblandade verktygslåda från FreeBSD 11.4 (FreeBSD 10 stöder inte LLVM 11).

Källa: opennet.ru

Lägg en kommentar