Rust 1.86 frigivet. Udarbejdelse af den officielle specifikation af Rust-sproget

Det generelle programmeringssprog Rust 1.86, 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 støtte til upcasting af egenskaber til basis-supertrækket, dvs. det er nu muligt direkte at konvertere en reference til et egenskabsobjekt til en reference til et superegenskabsobjekt uden behov for at oprette en speciel metode i egenskaben, der returnerer en reference til superegenskaben. En lignende operation kan udføres med andre typer smarte pointere, for eksempel "Arc -> bue " og "*const dyn Trait -> *const dyn Supertrait." egenskab Trait: Supertrait {} trait Supertrait {} fn upcast(x: &dyn Trait) -> &dyn Supertrait { x }
  • Get_disjoint_mut() metoden er blevet tilføjet til HashMap og skiver for samtidig at opnå flere foranderlige elementreferencer. Tidligere tillod lånekontrollen ikke samtidig brug af links opnået ved hjælp af get_mut()-metoden. lad v = &mut [1, 2, 3]; hvis lad Ok([a, b]) = v.get_disjoint_mut([0, 2]) { *a = 413; *b = 612; } assert_eq!(v, &[413, 2, 612]); hvis lad Ok([a, b]) = v.get_disjoint_mut([0..1, 1..3]) { a[0] = 8; b[0] = 88; b[1] = 888; } assert_eq!(v, &[8, 88, 888]);
  • Det er tilladt at markere sikre funktioner ved hjælp af "#[target_feature]" attributten, hvilket indikerer, at funktionen bruger de specificerede CPU-kapaciteter. En sikker funktion markeret med "#[target_feature]" attributten kan kun kaldes sikkert af en anden sikker funktion, hvis den også er markeret med "#[target_feature]" (ellers skal lignende funktioner kaldes i en usikker blok). De kan dog ikke videregives til funktioner, der accepterer generiske parametre begrænset til Fn*-typer. Tidligere kunne attributten "#[target_feature]" kun anvendes på funktioner, der var markeret som "usikre". #[target_feature(enable = "avx2")] fn requires_avx2() { // ... } #[target_feature(enable = "avx2")] fn safe_callsite() { requires_avx2(); } fn unsafe_callsite() { if is_x86_feature_detected!("avx2") { unsafe { requires_avx2() }; } }
  • Rust-kompileren inkluderer en debug-påstand om, at markøren ikke indeholder en NULL-værdi ved læsning og skrivning af størrelser, der ikke er nul, samt ved genlån af en pointer til en reference. For eksempel, når fejlfindingstjek er aktiveret, vil følgende kode nu resultere i en "panik"-tilstand: lad _x = *std::ptr::null:: (); lad _x = &*std::ptr::null:: ();
  • Som standard er "missing_abi" fnugkontrollen aktiveret, hvilket resulterer i en advarsel, hvis der ikke er angivet noget ABI efter det eksterne nøgleord. Tidligere, hvis der ikke var angivet nogen ABI efter ekstern, blev det antaget, at ABI "C" blev brugt. Det anbefales nu eksplicit at specificere "C" ABI, f.eks. 'ekstern "C" {}' og 'ekstern "C" fn'
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • {float}::next_down
    • {float}::next_up
    • <[_]>::get_disjoint_mut
    • <[_]>::get_disjoint_unchecked_mut
    • slice::GetDisjointMutError
    • HashMap::get_disjoint_mut
    • HashMap::get_disjoint_unchecked_mut
    • NonZero::count_ones
    • Vec::pop_if
    • sync::Once::wait
    • sync::Once::wait_force
    • sync::OnceLock::wait
  • "const" tegnet bruges i funktioner:
    • tip::black_box
    • io::Cursor::get_mut
    • io::Cursor::set_position
    • str::er_char_grænse
    • str::split_at
    • str::split_at_checked
    • str::split_at_mut
    • str::split_at_mut_checked
  • Det tredje niveau af support er blevet implementeret for platformene {aarch64-unknown,x86_64-pc}-nto-qnx710_iosock, {aarch64-unknown,x86_64-pc}-nto-qnx800, {x86_64,i686}-win7-windows-cndh,amdg-gndh, x86_64-pc-cygwin, {mips,mipsel}-mti-none-elf, m68k-unknown-none-elf, armv7a-nuttx-{eabi,eabihf}, aarch64-unknown-nuttx og thumbv7a-nuttx-{eabi}.abi}. Det tredje niveau involverer grundlæggende support, men uden automatiseret test, udgivelse af officielle builds eller kontrol af, om koden kan bygges.
  • Tilføjet en advarsel om afslutningen af ​​andet niveau af understøttelse af målplatformen i586-pc-windows-msvc i den næste udgivelse (1.87). Det anbefales at bruge platformen i686-pc-windows-msvc, som understøtter SSE2-instruktioner. Platformen i586-pc-windows-msvc er ikke længere nyttig, da Windows 10 SSE2-understøttelse er påkrævet, og tidligere versioner Windows understøttes ikke i Rust.

Derudover kan det bemærkes, at Ferrocene har forsynet fællesskabet med en specifikation for Rust-sproget (FLS - Ferrocene Language Specification), der blev oprettet under udviklingen af ​​dets Rust-kompiler til missionskritiske systemer og periodisk synkroniseret med den nuværende tilstand af den primære Rust-kompiler. FLS-specifikationen giver struktureret og detaljeret vejledning om syntaks, semantik og adfærd af Rust, velegnet til verifikation, kompatibilitetsvurdering og standardisering.

Bidrag vil blive brugt til at skabe en referencespecifikation for Rust-sproget, der kan bruges til at udvikle alternative compilere og til at teste compileren i sikkerhedskritiske områder.

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