Rust 1.66 programspråk release

Utgivningen av Rust 1.66 allmänt programmeringsspråk, grundat av Mozilla-projektet, men nu utvecklat under överinseende av den oberoende ideella organisationen Rust Foundation, har publicerats. Språket fokuserar på minnessäkerhet och ger möjlighet att uppnå hög jobbparallellism samtidigt som man undviker användningen av en skräpsamlare och körtid (körtiden reduceras till grundläggande initiering och underhåll av standardbiblioteket).

Rusts minneshanteringsmetoder räddar utvecklaren från fel vid manipulering av pekare och skyddar mot problem som uppstår på grund av minneshantering på låg nivå, som att komma åt ett minnesområde efter att det har frigjorts, avläsning av nollpekare, buffertöverskridningar, etc. För att distribuera bibliotek, tillhandahålla builds och hantera beroenden utvecklar projektet Cargo package manager. Crates.io-förvaret stöds för värdbibliotek.

Minnessäkerhet tillhandahålls i Rust vid kompilering genom referenskontroll, hålla reda på objektägande, hålla reda på objektlivslängder (scopes) och bedöma riktigheten av minnesåtkomst under kodexekvering. Rust ger också skydd mot heltalsspill, kräver obligatorisk initiering av variabelvärden innan användning, hanterar fel bättre i standardbiblioteket, tillämpar konceptet med oföränderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.

Huvudsakliga innovationer:

  • I uppräkningar med heltalsrepresentationer (attributet "#[repr(Int)]" är explicit indikation av diskriminanten (variantnummer i uppräkningen) tillåten, även om uppräkningen innehåller fält. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Lade till funktionskärna::hint::black_box som helt enkelt returnerar det mottagna värdet. Eftersom kompilatorn tror att den här funktionen gör något, kan black_box-funktionen användas för att inaktivera kompilatoroptimeringar för loopar när man utför kodprestandatestning eller när man undersöker genererad maskinkod (så att kompilatorn inte anser att koden är oanvänd och tar bort den). Till exempel, i exemplet nedan, förhindrar black_box(v.as_ptr()) kompilatorn från att tro att vektorn v inte används. använd std::hint::black_box; fn push_cap(v: &mut Vec) { för i i 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Pakethanteraren "cargo" erbjuder kommandot "remove", som låter dig ta bort beroenden från Cargo.toml-manifestet från kommandoraden.
  • En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Lägg till AsFd-implementeringar för stdio-låstyper när du använder WASI.
    • impl TryFrom > för Box<[T; N]>
    • kärna::tips::black_box
    • Duration::try_from_secs_{f32,f64}
    • Alternativ::packa upp
    • std::os::fd
  • Områdena "..X" och "..=X" är tillåtna i mallar.
  • När man bygger fronten av rustc-kompilatorn och LLVM-backend, används LTO (Link Time Optimization) och BOLT (Binary Optimization and Layout Tool) optimeringslägen för att öka prestandan för den resulterande koden och minska minnesförbrukningen.
  • Implementerat nivå 5-stöd för armv5te-none-eabi och thumbvXNUMXte-none-eabi plattformar. Den tredje nivån innebär grundläggande stöd, men utan automatiserad testning, publicering av officiella builds och kontroll av möjligheten att bygga koden.
  • Lagt till stöd för att länka till macOS Generic Libraries.

Dessutom kan vi notera inkluderingen i GCC-kodbasen av front-end-kompilatorn av Rust-språket (gccrs). Frontend ingår i GCC 13-grenen, som kommer att släppas i maj 2023. Från och med GCC 13 kommer standard GCC-verktygssatsen att kunna användas för att kompilera Rust-program utan att behöva installera rustc-kompilatorn byggd med LLVM-utvecklingar. Rust-implementeringen i GCC 13 kommer att vara i betastatus, inte aktiverad som standard.

Källa: opennet.ru

Lägg en kommentar