Rust 1.77 programmeringssprog udgivelse

Det generelle programmeringssprog Rust 1.77, 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:

  • Tilføjet understøttelse af literaler for C-strenge (c"text"), som gemmes i hukommelsen med et afsluttende null-tegn og er knyttet til typen "CStr". Understøttelse af C-strenge forventes at forenkle skrivning af kode, der interagerer med lag i programmeringssprog, der bruger null-terminerede strenge, og at muliggøre udførelse af nødvendige kontroller under kompilering. const HELLO: &core::ffi::CStr = c"Hej verden!";
  • Asynkront udførte funktioner deklareret med udtrykket "async fn" har tilladelse til at bruge rekursion, dvs. sådanne funktioner kan nu kalde sig selv. async fn fib(n: u32) -> u32 { match n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await } }
  • Forskydningen_af! Makroen er blevet stabiliseret, så du kan bestemme byte-offset'en for felter i strukturer, optællinger, foreninger og tupler i forhold til starten af ​​typen. I praksis kan makroen være nyttig i situationer, hvor du har brug for at arbejde på feltforskydningsniveau i mangel af en typeinstans. Især offset_of-funktionaliteten er nødvendig, når man udvikler lavniveaukomponenter såsom drivere. brug std::mem; #[repr(C)] struct FieldStruct { første: u8, anden: u16, tredje: u8 } assert_eq!(mem::offset_of!(FieldStruct, første), 0); assert_eq!(mem::offset_of!(FieldStruct, sekund), 2); assert_eq!(mem::offset_of!(FieldStruct, tredje), 4);
  • I Cargo-pakkehåndteringen er fjernelse af filer fra fejlfindingsdata (strip = "debuginfo") som standard aktiveret i udgivelsesprofiler, medmindre fejlfindingstilstand eksplicit er aktiveret i Cargo-profilen, dvs. hvis parameteren debug = 0.
  • Indstillingen "-Zthir-unsafeck=on" er som standard aktiveret, hvilket muliggør usikker kontrol af THIR-mellemrepræsentationen (Typed High-Level Intermediate Representation).
  • Tilføjet lint-tjek for static_mut_refs for at udsende en advarsel, når der bruges referencer til ænderlige statiske værdier.
  • Muligheden for at bruge "Fra<&[T;" typen er blevet implementeret. N]>" for typen "Ko<[T]>". fn foo(data: impl Into >) { /* … */ } fn main() { foo(&[“hej”, “verden”]); }
  • Compileren sørger for justering for 16-byte i128- og u128-typer til x86-systemer.
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • array::each_ref
    • array::each_mut
    • core::net
    • f32::runde_ligheder_lige
    • f64::runde_ligheder_lige
    • mem::offset_of!
    • slice::first_chunk
    • slice::first_chunk_mut
    • slice::split_first_chunk
    • slice::split_first_chunk_mut
    • slice::sidste_chunk
    • slice::last_chunk_mut
    • slice::split_last_chunk
    • slice::split_last_chunk_mut
    • slice::chunk_by
    • slice::chunk_by_mut
    • Bound::map
    • Fil::opret_ny
    • Mutex::clear_poison
    • RwLock::clear_poison
  • Implementerede tredje niveau af understøttelse for platformene aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf og riscv32im-risc0-zkvm-elf. Det tredje niveau indebærer grundlæggende support, men uden automatiseret testning, udgivelse af officielle builds og kontrol af evnen til at bygge kode.

Kilde: opennet.ru

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster