Rust programmeringssprog udgivelse 2021 (1.56)

Udgivelsen af ​​systemprogrammeringssproget Rust 1.56, grundlagt af Mozilla-projektet, men nu udviklet i regi af den uafhængige non-profit organisation Rust Foundation, er blevet offentliggjort. Ud over det almindelige versionsnummer er udgivelsen også betegnet Rust 2021 og markerer en stabilisering af ændringer, der er foreslået over de seneste tre år. Rust 2021 vil også tjene som grundlag for at øge funktionaliteten over de næste tre år, i lighed med hvordan udgivelsen af ​​Rust 2018 blev grundlaget for udviklingen af ​​sproget i de seneste tre år.

For at bevare kompatibiliteten kan udviklere bruge "2015", "2018" og "2021" etiketter i deres programmer, hvilket tillader programmer at blive linket til sprogtilstandsudsnit svarende til de valgte udgaver af Rust. Udgaver blev introduceret for at adskille inkompatible ændringer og er konfigureret i metadataene for fragtpakker gennem feltet "udgave" i afsnittet "[pakke]". For eksempel inkluderer "2018"-udgaven funktionaliteten stabiliseret i slutningen af ​​2018 og dækker også alle yderligere ændringer, der ikke bryder kompatibiliteten. 2021-udgaven indeholder desuden interoperabilitetsbrydende funktioner foreslået i den nuværende 1.56-udgivelse og godkendt til fremtidig implementering. Ud over selve sproget tager redaktionen også højde for værktøjernes og dokumentationens tilstand.

Større inkompatibiliteter registreret i Rust 2021:

  • Separat Capture in Closures - Lukninger kan nu fange individuelle feltnavne i stedet for hele identifikatoren. For eksempel "|| ax + 1" vil kun fange "ax" i stedet for "a".
  • IntoIterator-egenskaben for arrays: array.into_iter() giver dig mulighed for at iterere over array-elementer efter værdier i stedet for referencer.
  • Behandlingen af ​​"|" udtryk er blevet ændret i macro_rules (Boolesk ELLER) i mønstre - ":pat"-specifikationen i matcher respekterer nu "A | B".
  • Cargo Package Manager inkluderer som standard den anden version af funktionsresolveren, som understøttes af Rust 1.51.
  • TryFrom-, TryInto- og FromIterator-egenskaberne er blevet tilføjet til prelude-standardbiblioteksmodulet.
  • Makroerne panic!(..) og assert!(expr, ..) bruger nu altid format_args!(..) til at formatere strenge, svarende til println!().
  • Udtrykkene ident#, ident"..." og ident'...' er reserveret i sprogsyntaksen.
  • Flyttede bare_trait_objects og ellipsis_inclusive_range_patterns advarsler til fejl.

Nyt i Rust 1.56:

  • I Cargo.toml, i afsnittet "[pakke]", er feltet rustversion blevet tilføjet, hvorigennem du kan bestemme den mindste understøttede version af Rust for kassepakken. Hvis den aktuelle version ikke matcher den angivne parameter, stopper Cargo med at arbejde med en fejlmeddelelse.
  • Ved mønstermatchning ved hjælp af "binding @ pattern"-udtryk, er der understøttelse for at specificere yderligere bindinger (f.eks. "lad matrix @ Matrix { row_len, .. } = get_matrix();").
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • "const"-attributten, som bestemmer muligheden for at bruge i enhver sammenhæng i stedet for konstanter, bruges i funktioner
    • std::mem::transmute
    • [T]::først
    • [T]::split_first
    • [T]::sidste
    • [T]::split_sidste
  • Compileren er blevet skiftet til at bruge LLVM version 13.
  • Et andet niveau af support er blevet implementeret for platformen aarch64-apple-ios-sim og et tredje niveau for platformene powerpc-unknown-freebsd og riscv32imc-esp-espidf. Det tredje niveau involverer grundlæggende support, men uden automatiseret test, udgivelse af officielle builds eller kontrol af, om koden kan bygges.

Husk, at Rust er fokuseret på hukommelsessikkerhed, giver automatisk hukommelsesstyring og giver et middel til at opnå høj parallelitet i jobudførelse uden brug af en skraldeopsamler eller runtime (runtime reduceres til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

Rusts automatiske hukommelseshåndtering eliminerer fejl ved manipulation af pointere og beskytter mod problemer, der opstår fra manipulation af hukommelse på lavt niveau, såsom adgang til en hukommelsesregion, efter at den er blevet frigivet, nul pointer-dereferencer, bufferoverskridelser osv. For at distribuere biblioteker, sikre samling og administrere afhængigheder udvikler projektet Cargo-pakkemanageren. Crates.io-lageret understøttes til hosting af biblioteker.

Kilde: opennet.ru

Tilføj en kommentar