Rust 1.58 programmeringsspråkutgivelse

Utgivelsen av det generelle programmeringsspråket Rust 1.58, grunnlagt av Mozilla-prosjektet, men nå utviklet i regi av den uavhengige ideelle organisasjonen Rust Foundation, har blitt publisert. Språket fokuserer på minnesikkerhet, gir automatisk minnehåndtering og gir midler til å oppnå høy oppgaveparallellisme 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.

Hovedinnovasjoner:

  • I linjeformateringsblokker, i tillegg til den tidligere tilgjengelige muligheten til å erstatte variabler som er eksplisitt oppført etter en linje etter nummer og navn, implementeres muligheten til å erstatte vilkårlige identifikatorer ved å legge til uttrykket "{identifier}" til linjen. For eksempel: // Tidligere støttede konstruksjoner: println!("Hei, {}!", get_person()); println!("Hei, {0}!", get_person()); println!("Hei, {person}!", person = get_person()); // nå kan du spesifisere let person = get_person(); println!("Hei, {person}!");

    Identifikatorer kan også spesifiseres direkte i formateringsalternativer. la (bredde, presisjon) = get_format(); for (navn, poengsum) i get_scores() { println!("{navn}: {score:width$.precision$}"); }

    Den nye erstatningen fungerer i alle makroer som støtter definisjon av strengformat, med unntak av "panikk!"-makroen. i 2015- og 2018-versjonene av Rust-språket, der panikk!("{ident}") behandles som en vanlig streng (i Rust 2021 fungerer erstatningen).

  • Oppførselen til std::process::Kommandostrukturen på Windows-plattformen er endret slik at den av sikkerhetsgrunner ikke lenger ser etter kjørbare filer i gjeldende katalog ved utføring av kommandoer. Den gjeldende katalogen er ekskludert fordi den kan brukes til å kjøre ondsinnet kode hvis programmer kjøres i ikke-klarerte kataloger (CVE-2021-3013). Den nye kjørbare deteksjonslogikken innebærer å søke i Rust-katalogene, applikasjonskatalogen, Windows-systemkatalogen og katalogene spesifisert i PATH-miljøvariabelen.
  • Standardbiblioteket har utvidet antall funksjoner merket "#[must_use]" for å gi en advarsel hvis returverdien ignoreres, noe som hjelper til med å identifisere feil forårsaket av å anta at en funksjon vil endre verdier i stedet for å returnere en ny verdi.
  • En ny del av API har blitt flyttet til kategorien stabil, inkludert metodene og implementeringene av egenskaper er stabilisert:
    • Metadata::is_symlink
    • Sti::is_symlink
    • {integer}::saturating_div
    • Option::unwrap_unchecked
    • Resultat::unwrap_unchecked
    • Resultat::unwrap_err_unchecked
  • "const"-attributtet, som bestemmer muligheten for å bruke det i enhver kontekst i stedet for konstanter, brukes i funksjonene:
    • Varighet::ny
    • Duration::checked_add
    • Duration::saturating_add
    • Duration::checked_sub
    • Duration::saturating_sub
    • Duration::checked_mul
    • Duration::saturating_mul
    • Duration::checked_div
  • Tillatt avreferanse av "*const T"-pekere i "const"-kontekster.
  • I Cargo package manager er rust_version-feltet lagt til i pakkens metadata, og alternativet "--message-format" er lagt til i kommandoen "cargo install".
  • Kompilatoren implementerer støtte for CFI-beskyttelsesmekanismen (Control Flow Integrity), som legger til kontroller før hvert indirekte anrop for å oppdage noen former for udefinert atferd som potensielt kan føre til brudd på den normale utførelsesordren (kontrollflyt) som et resultat av bruk av utnyttelser som endrer pekere lagret i minnet på funksjoner.
  • Kompilatoren har lagt til støtte for versjon 5 og 6 av LLVM-dekningssammenligningsformatet, brukt til å evaluere kodedekning under testing.
  • I kompilatoren er kravene til minimumsversjonen av LLVM hevet til LLVM 12.
  • Det tredje nivået av støtte for x86_64-unknown-none-plattformen er implementert. Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing, publisering av offisielle bygg, eller sjekk om koden kan bygges.

I tillegg kan vi merke oss publiseringen av Microsoft av utgivelsen av Rust for Windows 0.30-biblioteker, som lar deg bruke Rust-språket til å utvikle applikasjoner for Windows OS. Settet inkluderer to kassepakker (windows og windows-sys), som du får tilgang til Win API i Rust-programmer gjennom. Kode for API-støtte genereres dynamisk fra metadata som beskriver API, som lar deg implementere støtte ikke bare for eksisterende Win API-kall, men for anrop som vil vises i fremtiden. Den nye versjonen legger til støtte for UWP-målplattformen (Universal Windows Platform) og implementerer Handle- og Debug-typene.

Kilde: opennet.ru

Legg til en kommentar