Rust 1.60 programmeringsspråkutgivelse

Utgivelsen av Rust 1.60 generell programmeringsspråk, grunnlagt av Mozilla-prosjektet, men nå utviklet i regi av den uavhengige ideelle organisasjonen Rust Foundation, har blitt publisert. Språket fokuserer på minnesikkerhet og gir midler til å oppnå høy jobbparallellisme samtidig som man unngår bruk av en søppeloppsamler og kjøretid (kjøretiden reduseres til grunnleggende initialisering og vedlikehold av standardbiblioteket).

Rusts minnehåndteringsmetoder sparer utvikleren fra feil ved manipulering av pekere og beskytter mot problemer som oppstår på grunn av minnehåndtering på lavt nivå, for eksempel tilgang til et minneområde etter at det har blitt frigjort, avreferering av null-pekere, bufferoverskridelser, etc. For å distribuere biblioteker, tilby bygg og administrere avhengigheter, utvikler prosjektet Cargo-pakkeansvarlig. Crates.io-depotet støttes for hosting av biblioteker.

Minnesikkerhet er gitt i Rust på kompileringstidspunktet gjennom referansesjekking, holde styr på objekteierskap, holde styr på objektlevetider (scopes), og vurdere riktigheten av minnetilgang under kjøring av kode. Rust gir også beskyttelse mot heltallsoverløp, krever obligatorisk initialisering av variabelverdier før bruk, håndterer feil bedre i standardbiblioteket, bruker konseptet med uforanderlige referanser og variabler som standard, tilbyr sterk statisk skriving for å minimere logiske feil.

Hovedinnovasjoner:

  • Rustc-kompilatoren har et stabilisert LLVM-basert system for å generere dekningsdata som brukes til å evaluere kodedekning under testing. For å aktivere dekningsdata under montering, må du bruke "-Cinstrument-coverage"-flagget, for eksempel starte sammenstillingen med kommandoen "RUSTFLAGS="-C instrument-coverage" cargo build". Etter å ha kjørt den kjørbare filen kompilert på denne måten, vil default.profraw-filen bli lagret i gjeldende katalog, for behandling som du kan bruke llvm-profdata-verktøyet fra llvm-tools-preview-komponenten. Utdataene som behandles av llvm-profdata kan deretter sendes til llvm-cov for å generere en kommentert kodedekningsrapport. Informasjon om koblingen til kildekoden er hentet fra den kjørbare filen som undersøkes, som inkluderer nødvendige data om sammenhengen mellom dekningstellere og koden. 1| 1|fn main() { 2| 1| println!("Hei, verden!"); 3| 1|}
  • I lastepakkemanageren har støtten for "-timings"-flagget blitt stabilisert, som inkluderer generering av en detaljert rapport om fremdriften av bygget og utførelsestiden for hvert trinn. Rapporten kan være nyttig for å optimalisere ytelsen til monteringsprosessen.
  • Lastepakkebehandleren tilbyr en ny syntaks for mekanismen for betinget kompilering og valg av valgfrie avhengigheter, konfigurert i Cargo.toml-filen ved å liste en liste over navngitte egenskaper i [funksjoner]-delen og aktiveres ved å aktivere egenskapene under pakkebyggingen ved å bruke «--features»-flagget. Den nye versjonen legger til støtte for avhengigheter i separate navnerom og svake avhengigheter.

    I det første tilfellet er det mulig å bruke elementer med prefikset "dep:" i delen "[funksjoner]" for å eksplisitt koble til en valgfri avhengighet uten å implisitt representere denne avhengigheten som en funksjon. I det andre tilfellet er støtte for merking med "?"-tegnet lagt til. ("pakkenavn?/funksjonsnavn") valgfrie avhengigheter som bare skal inkluderes hvis en annen egenskap inkluderer den gitte valgfrie avhengigheten. For eksempel, i eksemplet nedenfor vil aktivering av serde-egenskapen aktivere "serde"-avhengigheten, så vel som "serde"-egenskapen for "rgb"-avhengigheten, men bare hvis "rgb"-avhengigheten er aktivert andre steder: [dependencies] serde = { versjon = " 1.0.133", valgfri = sann } rgb = { versjon = "0.8.25", valgfri = sann } [funksjoner] serde = ["dep:serde", "rgb?/serde"]

  • Støtte for inkrementell kompilering, som ble deaktivert i den siste utgivelsen, har blitt returnert. Kompilatorfeilen som førte til at funksjonen ble deaktivert er løst.
  • Løste noen problemer med å gi Instant-timere en garanti for monoton timing, som tar hensyn til tiden systemet bruker i hvilemodus. Tidligere ble OS API brukt når det var mulig for å betjene timeren, som ikke tok hensyn til problematiske situasjoner som bryter tidens monotoni, som maskinvareproblemer, bruk av virtualisering eller feil i operativsystemet.
  • En ny del av API har blitt flyttet til kategorien stabil, inkludert metodene og implementeringene av egenskaper er stabilisert:
    • Arc::new_cyclic
    • Rc::ny_syklisk
    • skive::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • Kanskje Uninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usize::abs_diff
    • Skjerm for io::ErrorKind
    • Fra for ExitCode
    • Ikke for ! (skriv "aldri")
    • _Op_Tilordne<$t>
    • arch::is_aarch64_feature_detected!
  • Det tredje støttenivået er implementert for plattformene mips64-openwrt-linux-musl* og armv7-unknown-linux-uclibceabi (softfloat). Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing, publisering av offisielle bygg, eller sjekk om koden kan bygges.
  • Kompilatoren har blitt byttet til å bruke LLVM 14.

I tillegg kan du merke deg:

  • Lagt til støtte for oppstart av rustc-kompilatoren ved hjelp av rustc_codegen_gcc-backend, som lar deg bruke libgccjit-biblioteket fra GCC-prosjektet som en kodegenerator i rustc, som lar rustc gi støtte for arkitekturer og optimaliseringer tilgjengelig i GCC. Kompilatorpromotering betyr muligheten til å bruke en GCC-basert kodegenerator i rustc for å bygge rustc-kompilatoren selv. På den praktiske siden lar denne funksjonen deg bygge rustprogrammer for arkitekturer som ikke tidligere ble støttet i rustc.
  • Utgivelsen av uutils coreutils 0.0.13-verktøysettet er tilgjengelig, der en analog av GNU Coreutils-pakken, omskrevet på Rust-språket, utvikles. Coreutils kommer med over hundre verktøy, inkludert sort, cat, chmod, chown, chroot, cp, date, dd, echo, vertsnavn, id, ln og ls. Målet med prosjektet er å lage en alternativ tverrplattformimplementering av Coreutils, som er i stand til å kjøre på Windows, Redox og Fuchsia-plattformer, samt distribusjon under den tillatelige MIT-lisensen, i stedet for GPL copyleft-lisensen.

    Den nye versjonen har forbedret implementeringer av mange verktøy, inkludert betydelig forbedret kompatibilitet av verktøyene cp, dd, df, split og tr med deres motparter fra GNU-prosjektet. Online dokumentasjon levert. Clap-parseren brukes til å analysere kommandolinjeargumenter, som har forbedret utdataene for "--help"-flagget og lagt til støtte for forkortelser av lange kommandoer (du kan for eksempel spesifisere "ls -col" i stedet for "ls -color" ”).

Kilde: opennet.ru

Legg til en kommentar