Rust 1.66 programmeringssprog udgivelse

Det generelle programmeringssprog Rust 1.66, grundlagt af Mozilla-projektet, men nu udviklet i regi af den uafhængige non-profit organisation Rust Foundation, er blevet frigivet. Sproget fokuserer på hukommelsessikkerhed og giver midlerne til at opnå høj jobparallelisme, samtidig med at man undgår brugen af ​​en skraldeopsamler og runtime (runtime reduceres til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

Rusts hukommelseshåndteringsmetoder sparer udvikleren for fejl ved manipulation af pointere og beskytter mod problemer, der opstår på grund af hukommelseshåndtering på lavt niveau, såsom adgang til et hukommelsesområde efter det er blevet frigivet, dereferencing af nul-pointere, bufferoverskridelser osv. For at distribuere biblioteker, levere builds og administrere afhængigheder udvikler projektet Cargo Package Manager. Crates.io-lageret understøttes til hosting af biblioteker.

Hukommelsessikkerhed er tilvejebragt i Rust på kompileringstidspunktet gennem referencekontrol, holde styr på objektejerskab, holde styr på objektlevetider (scopes) og vurdere rigtigheden af ​​hukommelsesadgang under kodeudførelse. Rust giver også beskyttelse mod heltalsoverløb, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med uforanderlige referencer og variabler som standard, tilbyder stærk statisk skrivning for at minimere logiske fejl.

Vigtigste innovationer:

  • I optællinger med heltalsrepræsentationer (attributten "#[repr(Int)]") er eksplicit angivelse af diskriminanten (nummeret på varianten i optællingen) tilladt, selvom optællingen indeholder felter. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Tilføjet core::hint::black_box-funktion, som blot returnerer den accepterede værdi. Da compileren mener, at funktionen udfører en specifik handling, kan black_box-funktionen bruges til at deaktivere compilerens optimering af loops, når kode benchmarkes eller den genererede maskinkode undersøges (så compileren ikke betragter koden som ubrugt og fjerner den). For eksempel, i eksemplet nedenfor, forhindrer angivelsen af ​​black_box(v.as_ptr()) compileren i at antage, at vektoren v ikke bruges. brug std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Fragtpakkemanageren giver en "fjern"-kommando, der giver dig mulighed for at fjerne afhængigheder fra et Cargo.toml-manifest fra kommandolinjen.
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • 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}
    • Tilføj AsFd-implementeringer til stdio-låsetyper, når du bruger WASI.
    • impl TryFrom > for Box<[T; N]>
    • kerne::tip::black_box
    • Varighed::try_from_secs_{f32,f64}
    • Option:: unzip
    • std::os::fd
  • Områderne "..X" og "..=X" er tilladt i skabeloner.
  • Når rustc-compiler-frontend og LLVM-backend bygges, anvendes optimeringstilstandene LTO (Link Time Optimization) og BOLT (Binary Optimization and Layout Tool), hvilket gør det muligt at øge ydeevnen af ​​den resulterende kode og reducere hukommelsesforbruget.
  • Implementeret det tredje niveau af støtte til armv5te-none-eabi og thumbv5te-none-eabi platforme. Det tredje niveau indebærer grundlæggende support, men uden automatiseret test, udgivelse af officielle builds og kontrol af evnen til at bygge kode.
  • Tilføjet understøttelse til at linke til macOS universelle biblioteker.

Derudover er det værd at bemærke inkluderingen af ​​Rust-sprogcompiler-frontend'en (gccrs) i GCC-kodebasen. Frontend'en er inkluderet i GCC 13-grenen, som udgives i maj 2023. Fra og med GCC 13 kan standard GCC-værktøjskæden bruges til at kompilere Rust-programmer uden behov for at installere rustc-compileren, som er bygget ved hjælp af LLVM-arbejde. Rust-implementeringen i GCC 13 vil være i betastatus og ikke aktiveret som standard.

Kilde: opennet.ru

Tilføj en kommentar