Rust 1.34 programmeringssprog udgivelse

tog sted frigivelse af systemprogrammeringssprog Rust 1.34udviklet af Mozilla-projektet. Sproget fokuserer på sikker hukommelsesstyring, giver automatisk hukommelsesstyring og giver midlerne til at opnå høj jobparallelisme, mens man undgår brugen af ​​en skraldeopsamler og køretid.

Rusts automatiske hukommelseshåndtering sparer udvikleren for at manipulere pointere og beskytter mod problemer, der opstår som følge af manipulation af hukommelsen på lavt niveau, såsom adgang til et hukommelsesområde, efter at det er blevet frigivet, dereferencing af nul-pointere, bufferoverskridelser osv. For at distribuere biblioteker, sikre samling og administrere afhængigheder udvikler projektet en pakkemanager Last, som giver dig mulighed for at få de biblioteker, du skal bruge til programmet, med et enkelt klik. Et lager er understøttet til at være vært for biblioteker kasser.io.

The main innovationer:

  • Tilføjede værktøjer til Cargo-pakkehåndteringen til at arbejde med alternative pakkeregistre, der kan eksistere side om side med det offentlige crates.io-register. For eksempel kan private applikationsudviklere nu bruge deres eget private register, der kan bruges, når de noterer afhængigheder i Cargo.toml og bruge en versionsmodel, der ligner crates.io til deres produkter, samt referere til både crates.io og crates.io i afhængigheder til dit eget register.

    For at tilføje eksterne registre til .cargo/config (placeret i $HOME eller pakkemappe)
    stillet til rådighed "[registre]"-sektionen, og for at bruge et eksternt register, dukkede "registry"-indstillingen op i beskrivelsen af ​​hver afhængighed i Cargo.toml. For at oprette forbindelse til et ekstra register skal du blot placere godkendelsestokenet i filen ~/.cargo/credentials og køre kommandoen
    "cargo login --registry=my-registry", og for at udgive pakken -
    "cargo publicer --registry=mit-registrering";

  • Tilføjet fuld support til brug af "?" i prøver doktorprøver, så du kan bruge koden med eksempler fra dokumentationen som test. Tidligere operatør
    "?" kunne kun bruges til at håndtere fejl under testudførelse, hvis der var en "fn main()"-funktion eller i "#[test]"-funktionerne;

  • I tilpassede attributter defineret med proceduremæssige makroer sikret evnen til at bruge vilkårlige sæt af tokens ("#[attr($tokens)]", "#[attr[$tokens]] og #[attr{$tokens}]"). Tidligere kunne elementer kun angives i træ/rekursiv form ved hjælp af strengliteraler, såsom "#[foo(bar, baz(quux, foo = "bar"))]", men nu er det muligt at bruge enums ('# [range(0. .10)]') og konstruktioner som "#[bound(T: MyTrait)]";
  • Stabiliserede træk (egenskab) Prøv fra и prøve, som giver dig mulighed for at udføre typekonverteringer med fejlhåndtering. For eksempel bruger metoder som from_be_bytes med heltalstyper arrays som input, men dataene er ofte af typen Slice, og konvertering mellem arrays og slices er problematisk at gøre manuelt. Med de nye egenskaber kan denne operation udføres i farten ved at kalde .try_into(), for eksempel "let num = u32::from_be_bytes(slice.try_into()?)". Fejltype tilføjet for konverteringer, der altid lykkes (f.eks. fra type u8 til u32) ufejlbarlig, hvilket giver dig mulighed for gennemsigtigt at bruge
    TryFrom for alle eksisterende "Fra"-implementeringer;

  • Funktion forældet CommandExt::before_exec, som gjorde det muligt at eksekvere en behandler før kørsel af en exec, der kørte i konteksten af ​​den underordnede proces forked efter fork()-kaldet. Under sådanne forhold kan nogle ressourcer i den overordnede proces, såsom filbeskrivelser og tilknyttede hukommelsesområder, blive duplikeret, hvilket kan føre til udefineret adfærd og ukorrekt arbejde i biblioteker.
    Det anbefales at bruge den usikre funktion i stedet for before_exec CommandExt::pre_exec.

  • Signerede og usignerede atomare heltaltyper fra 8 til 64 bit stabiliseres (f.eks. AtomicU8), samt signerede typer Ikke-NulI[8|16|32|64|128].
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoderne Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add] |sub] og SystemTime er stabiliseret ::checked_[add|sub]. Iter::from_fn og iter::successors funktionerne er blevet stabiliseret;
  • For alle heltalstyper implementeres metoderne checked_pow, saturating_pow, wrapping_pow og overflowing_pow;
  • Tilføjet muligheden for at aktivere optimeringer på linkningsstadiet ved at specificere "-C linker-plugin-lto" build-indstillingen.

Kilde: opennet.ru

Tilføj en kommentar