Rust 1.66 programmeringsspråkutgivelse

Utgivelsen av Rust 1.66 generell programmeringsspråk, grunnlagt av Mozilla-prosjektet, men nå utviklet i regi av den uavhengige ideelle organisasjonen Rust Foundation, har blitt publisert. Språket fokuserer på minnesikkerhet og gir midler til å oppnå høy jobbparallellisme samtidig som man unngår bruk av en søppeloppsamler og kjøretid (kjøretiden reduseres til grunnleggende initialisering og vedlikehold av standardbiblioteket).

Rusts minnehåndteringsmetoder sparer utvikleren fra feil ved manipulering av pekere og beskytter mot problemer som oppstår på grunn av minnehåndtering på lavt nivå, for eksempel tilgang til et minneområde etter at det har blitt frigjort, avreferering av null-pekere, bufferoverskridelser, etc. For å distribuere biblioteker, tilby bygg og administrere avhengigheter, utvikler prosjektet Cargo-pakkeansvarlig. Crates.io-depotet støttes for hosting av biblioteker.

Minnesikkerhet er gitt i Rust på kompileringstidspunktet gjennom referansesjekking, holde styr på objekteierskap, holde styr på objektlevetider (scopes), og vurdere riktigheten av minnetilgang under kjøring av kode. Rust gir også beskyttelse mot heltallsoverløp, krever obligatorisk initialisering av variabelverdier før bruk, håndterer feil bedre i standardbiblioteket, bruker konseptet med uforanderlige referanser og variabler som standard, tilbyr sterk statisk skriving for å minimere logiske feil.

Hovedinnovasjoner:

  • I oppregninger med heltallsrepresentasjoner ("#[repr(Int)]"-attributtet), er eksplisitt indikasjon av diskriminanten (variantnummer i opptellingen) tillatt, selv om oppregningen inneholder felt. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Lagt til funksjonskjerne::hint::black_box som ganske enkelt returnerer den mottatte verdien. Siden kompilatoren tror at denne funksjonen gjør noe, kan black_box-funksjonen brukes til å deaktivere kompilatoroptimaliseringer for løkker når du utfører kodeytelsestesting eller undersøker generert maskinkode (slik at kompilatoren ikke anser koden som ubrukt og fjerner den). For eksempel, i eksemplet nedenfor, hindrer black_box(v.as_ptr()) kompilatoren fra å tro at vektoren v ikke brukes. bruk std::hint::black_box; fn push_cap(v: &mut Vec) { for i i 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Pakkebehandleren "cargo" tilbyr kommandoen "remove", som lar deg fjerne avhengigheter fra Cargo.toml-manifestet fra kommandolinjen.
  • En ny del av API har blitt flyttet til kategorien stabil, inkludert metodene og implementeringene av egenskaper er stabilisert:
    • proc_macro::Span::kildetekst
    • 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}
    • Legg til AsFd-implementeringer for stdio-låstyper når du bruker WASI.
    • impl TryFrom > for boks<[T; N]>
    • kjerne::hint::black_box
    • Varighet::try_from_secs_{f32,f64}
    • Alternativ::pakke ut
    • std::os::fd
  • Områdene "..X" og "..=X" er tillatt i maler.
  • Når du bygger frontenden av rustc-kompilatoren og LLVM-backend, brukes LTO (Link Time Optimization) og BOLT (Binary Optimization and Layout Tool) optimaliseringsmoduser for å øke ytelsen til den resulterende koden og redusere minneforbruket.
  • Implementert nivå 5-støtte for armv5te-none-eabi og thumbvXNUMXte-none-eabi plattformer. Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing, publisering av offisielle bygg og kontroll av muligheten til å bygge koden.
  • Lagt til støtte for kobling til macOS Generic Libraries.

I tillegg kan vi merke oss inkluderingen i GCC-kodebasen av front-end-kompilatoren av Rust-språket (gccrs). Frontend er inkludert i GCC 13-grenen, som vil bli utgitt i mai 2023. Fra og med GCC 13, vil standard GCC-verktøysettet kunne brukes til å kompilere Rust-programmer uten behov for å installere rustc-kompilatoren bygget ved hjelp av LLVM-utviklinger. Rust-implementeringen i GCC 13 vil være i betastatus, ikke aktivert som standard.

Kilde: opennet.ru

Legg til en kommentar