Rust 1.73 programmeringssprog udgivelse

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

  • Formatet for meddelelser, der udsendes af standardprogrammets crash-handler (panik), er blevet omdesignet. Teksten angivet i "panik!"-makroen vises nu på en separat linje uden anførselstegn, hvilket gør meddelelsen lettere at læse og eliminerer forvirring, når indlejrede anførselstegn er til stede eller opdelt på tværs af flere linjer. fn main() { let file = "ferris.txt"; panik!("åh nej! {fil:?} ikke fundet!"); } Der var trådens 'hoved', der gik i panik over 'åh nej! "ferris.txt" ikke fundet!', src/main.rs:3:5 Tråd 'main' gik i panik på src/main.rs:3:5: åh nej! "ferris.txt" ikke fundet!

    Outputtet af meddelelser, der vises, når makroerne "assert_eq" og "assert_ne" udløses, er også blevet omarbejdet. fn main() { assert_eq!("🦀", "🐟", "ferris er ikke en fisk"); } Der var tråd 'main' i panik ved 'assertion failed: `(venstre == højre)` venstre: `"🦀"`, højre: `"🐟"`: ferris er ikke en fisk', src/main.rs: 2:5 Tråd 'main' gik i panik på src/main.rs:2:5: påstanden `venstre == højre` mislykkedes: ferris er ikke en fisk venstre: "🦀" højre: "🐟"

  • I overensstemmelse med RFC 3184 er muligheden for direkte at manipulere tråd-lokale (thread_local) LocalKey-lagernøgler blevet tilføjet > og LocalKey > gennem brug af get(), set(), take() og replace() metoder, i stedet for at bruge en "with(|indre| ...)" lukning, hvilket eliminerer behovet for at udføre yderligere initialiseringskode for standardværdier angivet for nye tråde ved brug af makroen "thread_local!" tråd_lokalt! { statiske TING: Celle > = Celle::ny(Vec::ny()); } fn f() { // var THINGS.with(|i| i.set(vec![32, 1, 2])); // blev THINGS.set(vec![3, 1, 2]); // ... // blev ladet v = TING.med(|i| i.take()); // blev lad v: Vec = THINGS.take(); }
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • Usigneret {integer}::div_ceil
    • Usigneret {integer}::next_multiple_of
    • Usigneret {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::få
    • LocalKey:: >::sæt
    • LocalKey:: >::tag
    • LocalKey:: >::erstat
    • LocalKey:: >::med_lån
    • LocalKey:: >::with_borrow_mut
    • LocalKey:: >::sæt
    • LocalKey:: >::tag
    • LocalKey:: >::erstat
  • "const"-attributten, som bestemmer muligheden for at bruge den i enhver sammenhæng i stedet for konstanter, bruges i funktionerne:
    • rc::Svag::ny
    • sync::Svag::ny
    • NonNull::as_ref
  • Compileren giver optagelse af versionsoplysninger i ".comment"-sektionen, svarende til GCC og Clang.
  • Det tredje niveau af support er blevet implementeret for platformene aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl og x86_64-unknown-linux - åh. Det tredje niveau involverer grundlæggende support, men uden automatiseret test, udgivelse af officielle builds eller kontrol af, om koden kan bygges.
  • Det andet niveau af understøttelse af målplatformen wasm32-wasi-preview1-threads er blevet implementeret. Det andet supportniveau involverer en monteringsgaranti.

Kilde: opennet.ru

Tilføj en kommentar