Rust 1.47 programspråk release

Release 1.47 av Rust-systemets programmeringsspråk, grundat av Mozilla-projektet, har publicerats. Språket fokuserar på minnessäkerhet, ger automatisk minneshantering och ger möjlighet att uppnå hög uppgiftsparallellism utan att använda en skräpsamlare eller körtid (körtiden reduceras till grundläggande initiering och underhåll av standardbiblioteket).

Rusts automatiska minneshantering eliminerar fel vid manipulering av pekare och skyddar mot problem som uppstår från minnesmanipulation på låg nivå, som att komma åt en minnesregion efter att den har frigjorts, nollpekarereferenser, buffertöverskridanden, etc. För att distribuera bibliotek, säkerställa montering och hantera beroenden utvecklar projektet Cargo package manager. Crates.io-förvaret stöds för värdbibliotek.

Huvudsakliga innovationer:

  • Implementerat stöd för egenskaper för arrayer av godtycklig storlek. 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 const generics-funktionalitet blev det möjligt att definiera generiska funktioner för vilken arraystorlek som helst, men de är ännu inte inkluderade i språkets stabila funktioner, även om de är implementerade i kompilatorn och används nu i standardbiblioteket för arraytyper 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 matades spåret ut i 23 steg, men nu kommer det att reduceras till 3 steg, så att du omedelbart kan 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 (Rust använder LLVM som backend för kodgenerering). Samtidigt behålls möjligheten att bygga med gamla LLVM, upp till version 8, men som standard (i rust-lang/llvm-project) används nu LLVM 11. Release av LLVM 11 väntas under kommande dagar.
  • 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:t har överförts till den stabila kategorin, inklusive stabiliserad Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, 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 används verktygslådan från FreeBSD 11.4 (FreeBSD 10 stöder inte LLVM 11).

Tagen från opennet.ru

Källa: linux.org.ru

Lägg en kommentar