Rust 1.57 programmeringssprog udgivelse

Udgivelsen af ​​systemprogrammeringssproget Rust 1.57, grundlagt af Mozilla-projektet, men nu udviklet i regi af den uafhængige non-profit organisation Rust Foundation, er blevet offentliggjort. Sproget fokuserer på hukommelsessikkerhed, giver automatisk hukommelsesstyring og giver mulighed for at opnå høj opgaveparallelisme 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.

Vigtigste innovationer:

  • Brugen af ​​"panik!"-makroen er blevet stabiliseret. i sammenhænge oprettet under kompilering, såsom "const fn"-erklæringer. Derudover, ud over at bruge "panik!" const-deklarationer tillader brugen af ​​"assert!"-makroen. og nogle andre standard biblioteks API'er. Stabilisering dækker endnu ikke hele formateringsinfrastrukturen, så i sin nuværende form er "panik!"-makroen kan kun bruges med statiske strenge (panic!(“...")) eller med en enkelt interpoleret værdi "&str" ved erstatning (panic!("{}", a)), hvilket bør begrænses til at erstatte "{ }" uden formateringsspecifikationer og andre typer. I fremtiden vil anvendeligheden af ​​makroer i konstante sammenhænge blive udvidet, men de stabiliserede muligheder er allerede tilstrækkelige til at udføre assert-tjek på kompileringsstadiet: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = hævde!(std::mem::size_of:: () == 8);
  • Cargo-pakkemanageren tillader brug af profiler med vilkårlige navne, ikke begrænset til "dev", "release", "test" og "bench". For at aktivere optimering på linkingsstadiet (LTO), når de endelige produktsamlinger er genereret, kan du f.eks. oprette en "produktions"-profil i Cargo.toml og tilføje flaget "lto = true". Men når du definerer dine egne profiler, skal du angive en eksisterende profil for at arve standardindstillinger fra den. Eksemplet nedenfor opretter en "produktions"-profil, der komplementerer "release"-profilen ved at inkludere flaget "lto = true". Selve profilen aktiveres ved at kalde last med muligheden "--profilproduktion", og samlingsartefakterne vil blive placeret i "mål/produktion" biblioteket. [profile.production] inherits = "frigivelse" lto = sand
  • Brugen af ​​try_reserve for typerne Vec, String, HashMap, HashSet og VecDeque er blevet stabiliseret, hvilket giver dig mulighed for at reservere plads på forhånd til et bestemt antal elementer af en given type for at reducere frekvensen af ​​hukommelsesallokeringsoperationer og undgå går ned under drift på grund af manglende hukommelse.
  • Det er tilladt at angive makroer med krøllede klammer i udtryk som "m!{ .. }.method()" og "m!{ .. }?".
  • Udførelsen af ​​funktionerne File::read_to_end og read_to_string er blevet optimeret.
  • Understøttelse af Unicode-specifikationen er blevet opdateret til version 14.0.
  • Udvidede antallet af funktioner markeret "#[must_use]" for at udstede en advarsel, hvis returværdien ignoreres, hvilket hjælper med at identificere fejl forårsaget af at antage, at en funktion vil ændre værdier i stedet for at returnere en ny værdi.
  • Tilføjet eksperimentel backend til kodegenerering ved hjælp af libgccjit.
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • [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::er_tilgængelig
    • Kommando::get_program
    • Kommando::get_args
    • Kommando::get_envs
    • Kommando::get_current_dir
    • CommandArgs
    • CommandEnvs
  • "const"-attributten, som bestemmer, om den kan bruges i en hvilken som helst kontekst i stedet for konstanter, bruges i funktionstip::unreachable_unchecked.
  • Det tredje niveau af support er blevet implementeret 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 platforme. Det tredje niveau involverer grundlæggende support, men uden automatiseret test, udgivelse af officielle builds eller kontrol af, om koden kan bygges.

Kilde: opennet.ru

Tilføj en kommentar