Rust programmeringsspråk utgivelse 2021 (1.56)

Utgivelsen av systemprogrammeringsspråket Rust 1.56, grunnlagt av Mozilla-prosjektet, men nå utviklet i regi av den uavhengige ideelle organisasjonen Rust Foundation, er publisert. I tillegg til det vanlige versjonsnummeret, kalles utgivelsen også Rust 2021 og markerer en stabilisering av endringer som er foreslått de siste tre årene. Rust 2021 vil også tjene som grunnlag for å øke funksjonaliteten i løpet av de neste tre årene, i likhet med hvordan utgivelsen av Rust 2018 ble grunnlaget for utviklingen av språket de siste tre årene.

For å opprettholde kompatibiliteten kan utviklere bruke "2015", "2018" og "2021" etiketter i programmene sine, slik at programmer kan kobles til språktilstandsstykker som tilsvarer de valgte utgavene av Rust. Utgaver ble introdusert for å skille inkompatible endringer og er konfigurert i metadataene til lastpakker gjennom "utgave"-feltet i "[pakke]"-delen. For eksempel inkluderer "2018"-utgaven funksjonaliteten stabilisert fra slutten av 2018 og dekker også alle ytterligere endringer som ikke bryter kompatibiliteten. 2021-utgaven inkluderer i tillegg interoperabilitetsbrytende funksjoner foreslått i gjeldende 1.56-utgivelse og godkjent for fremtidig implementering. I tillegg til selve språket, tar redaksjonen også hensyn til tilstanden til verktøyene og dokumentasjonen.

Store inkompatibiliteter registrert i Rust 2021:

  • Separat fangst i lukkinger - Lukkinger kan nå fange opp individuelle feltnavn i stedet for hele identifikatoren. For eksempel "|| ax + 1" vil bare fange "ax" i stedet for "a".
  • IntoIterator-egenskapen for matriser: array.into_iter() lar deg iterere over matriseelementer etter verdier, i stedet for etter referanser.
  • Behandlingen av «|»-uttrykk er endret i macro_rules (Boolsk ELLER) i mønstre - ":pat"-spesifikasjonen i treff respekterer nå "A | B".
  • Lastepakkebehandleren inkluderer som standard den andre versjonen av funksjonsløseren, støtte for denne dukket opp i Rust 1.51.
  • TryFrom-, TryInto- og FromIterator-trekkene er lagt til prelude standard bibliotekmodulen.
  • Makroene Panic!(..) og assert!(expr, ..) bruker nå alltid format_args!(..) for å formatere strenger, på samme måte som println!().
  • Uttrykkene ident#, ident"..." og ident'...' er reservert i språksyntaksen.
  • Flyttet bare_trait_objects og ellipsis_inclusive_range_patterns advarsler til feil.

Nytt i Rust 1.56:

  • I Cargo.toml, i delen «[pakke]», er rustversjonsfeltet lagt til, der du kan bestemme minimumsstøttet versjon av Rust for kassepakken. Hvis gjeldende versjon ikke samsvarer med den angitte parameteren, slutter Cargo å fungere med en feilmelding.
  • Når mønstermatching bruker "binding @ pattern"-uttrykk, gis støtte for å spesifisere ytterligere bindinger (for eksempel "la matrix @ Matrix { row_len, .. } = get_matrix();").
  • En ny del av API har blitt flyttet til kategorien stabil, inkludert metodene og implementeringene av egenskaper er stabilisert:
    • 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»-attributtet, som bestemmer muligheten for bruk i enhver kontekst i stedet for konstanter, brukes i funksjoner
    • std::mem::transmute
    • [T]::først
    • [T]::split_first
    • [T]::siste
    • [T]::split_last
  • Kompilatoren har blitt byttet til å bruke LLVM versjon 13.
  • Et andre nivå av støtte er implementert for aarch64-apple-ios-sim-plattformen og et tredje nivå for powerpc-unknown-freebsd og riscv32imc-esp-espidf-plattformene. Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing, publisering av offisielle bygg og verifisering av kodebyggbarhet.

Husk at Rust fokuserer på minnesikkerhet, gir automatisk minnehåndtering og gir midler til å oppnå høy parallellitet i jobbutførelse uten å bruke en søppeloppsamler eller kjøretid (kjøretiden reduseres til grunnleggende initialisering og vedlikehold av standardbiblioteket).

Rusts automatiske minnebehandling eliminerer feil ved manipulering av pekere og beskytter mot problemer som oppstår fra lavnivå minnemanipulering, som tilgang til et minneområde etter at det har blitt frigjort, null-pekereferanser, bufferoverskridelser, etc. For å distribuere biblioteker, sikre montering og administrere avhengigheter, utvikler prosjektet Cargo-pakkebehandleren. Crates.io-depotet støttes for hosting av biblioteker.

Kilde: opennet.ru

Legg til en kommentar