Rust 1.57 programmeringsspråkutgivelse

Utgivelsen av systemprogrammeringsspråket Rust 1.57, grunnlagt av Mozilla-prosjektet, men nå utviklet i regi av den uavhengige ideelle organisasjonen Rust Foundation, er publisert. Språket fokuserer på minnesikkerhet, gir automatisk minnebehandling 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:

  • Bruken av "panikk!"-makroen er stabilisert. i kontekster opprettet under kompilering, for eksempel "const fn"-erklæringer. I tillegg, i tillegg til å bruke "panikk!" const-deklarasjoner tillater bruk av "assert!"-makroen. og noen andre standard bibliotek-APIer. Stabilisering dekker ennå ikke hele formateringsinfrastrukturen, så i sin nåværende form er "panikk!"-makroen kan bare brukes med statiske strenger (panikk!(“...")) eller med en enkelt interpolert verdi "&str" når du erstatter (panikk!("{}", a)), som bør begrenses til å erstatte "{ }" uten formateringsspesifikasjoner og andre typer. I fremtiden vil anvendeligheten av makroer i konstante sammenhenger bli utvidet, men de stabiliserte egenskapene er allerede tilstrekkelige til å utføre påstandskontroller på kompileringsstadiet: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = hevde!(std::mem::size_of:: () == 8);
  • Cargo-pakkebehandleren tillater bruk av profiler med vilkårlige navn, ikke begrenset til "dev", "release", "test" og "benk". For å aktivere optimalisering på koblingsstadiet (LTO) bare når de endelige produktsammenstillingene er generert, kan du for eksempel opprette en "produksjons"-profil i Cargo.toml og legge til "lto = true"-flagget til den. Men når du definerer dine egne profiler, må du spesifisere en eksisterende profil for å arve standardinnstillinger fra den. Eksemplet nedenfor oppretter en "produksjons"-profil som utfyller "release"-profilen ved å inkludere "lto = true"-flagget. Selve profilen aktiveres ved å ringe last med alternativet "--profilproduksjon", og monteringsartefaktene vil bli plassert i "mål/produksjon"-katalogen. [profile.production] arver = "utgivelse" lto = sant
  • Bruken av try_reserve for typene Vec, String, HashMap, HashSet og VecDeque har blitt stabilisert, noe som lar deg reservere plass på forhånd for et visst antall elementer av en gitt type for å redusere frekvensen av minneallokeringsoperasjoner og unngå krasjer under drift på grunn av mangel på minne.
  • Det er tillatt å spesifisere makroer med krøllete klammeparenteser i uttrykk som "m!{ .. }.method()" og "m!{ .. }?".
  • Utførelsen av funksjonene File::read_to_end og read_to_string har blitt optimalisert.
  • Støtte for Unicode-spesifikasjonen er oppdatert til versjon 14.0.
  • 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.
  • Lagt til eksperimentell backend for kodegenerering ved bruk av libgccjit.
  • En ny del av API har blitt flyttet til kategorien stabil, inkludert metodene og implementeringene av egenskaper er stabilisert:
    • [T; N]::as_mut_slice
    • [T; N]::som_slice
    • samlinger::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Kommando::get_program
    • Kommando::get_args
    • Kommando::get_envs
    • Kommando::get_current_dir
    • CommandArgs
    • CommandEnvs
  • «const»-attributtet, som bestemmer om det kan brukes i en hvilken som helst kontekst i stedet for konstanter, brukes i funksjonhint::unreachable_unchecked.
  • Det tredje støttenivået er implementert for armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi og armv7a-kmic- solid_asp3-eabihf-plattformer. Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing, publisering av offisielle bygg og verifisering av kodebyggbarhet.

Kilde: opennet.ru

Legg til en kommentar