Rust 1.34 programmeringsspråkutgivelse

fant sted utgivelse av systemprogrammeringsspråk Rust 1.34, utviklet av Mozilla-prosjektet. Språket fokuserer på minnesikkerhet, gir automatisk minnehåndtering og gir et middel for å oppnå høy oppgaveparallellisme uten å bruke en søppeloppsamler eller kjøretid.

Rusts automatiske minnebehandling frigjør utvikleren fra pekermanipulasjon og beskytter mot problemer som oppstår fra lavnivå minnemanipulering, for eksempel etterfrie minnetilganger, null-pekerdereferanser, bufferoverskridelser og lignende. En pakkebehandler utvikles for å distribuere biblioteker, sikre montering og administrere avhengigheter av prosjektet. Cargo, slik at du kan få bibliotekene som trengs for programmet med ett klikk. Et depot støttes for å være vert for biblioteker kasser.io.

Den viktigste innovasjoner:

  • Cargo-pakkebehandleren har lagt til verktøy for å jobbe med alternative pakkeregistre som kan eksistere side om side med det offentlige crates.io-registeret. For eksempel kan utviklere av proprietære applikasjoner nå bruke sitt eget private register, som kan brukes når de noterer avhengigheter i Cargo.toml, og bruke en versjonsmodell som ligner på crates.io for sine produkter, samt henvise avhengigheter til begge kassene. io og til ditt eget register.

    For å legge til eksterne registre til .cargo/config (plassert i $HOME eller i pakkekatalogen)
    sørget for seksjonen "[registre]", og for å bruke et eksternt register, har "register"-alternativet dukket opp i beskrivelsen av hver avhengighet i Cargo.toml. For å koble til et ekstra register, plasser ganske enkelt autentiseringstokenet i ~/.cargo/credentials-filen og kjør kommandoen
    "cargo login --registry=my-registry" og for å publisere en pakke -
    "last publisere -registry=mitt-registret";

  • Lagt til full støtte for bruk av "?"-operatøren. i tester doktorprøver, slik at du kan bruke eksempelkode fra dokumentasjonen som tester. Tidligere operatør
    "?" kan brukes til å håndtere feil under testkjøring bare i nærvær av "fn main()"-funksjonen eller i "#[test]"-funksjonene;

  • I egendefinerte attributter definert ved hjelp av prosedyremakroer sikret muligheten til å bruke vilkårlige sett med tokens ("#[attr($tokens)]", "#[attr[$tokens]] og #[attr{$tokens}]"). Tidligere kunne elementer bare spesifiseres i et tre/rekursiv form ved å bruke strengliteraler, for eksempel “#[foo(bar, baz(quux, foo = “bar”))]”, men nå er det mulig å bruke oppregninger (' #[range(0. .10)]') og konstruksjoner som “#[bound(T: MyTrait)]”;
  • Stabiliserte typer (egenskap) Prøv fra и Prøv inn, som tillater typekonverteringer med feilhåndtering. For eksempel, metoder som from_be_bytes med heltallstyper bruker arrays som input, men dataene kommer ofte i en Slice-type, og konvertering mellom arrays og slices er problematisk å gjøre manuelt. Ved hjelp av nye egenskaper kan den spesifiserte operasjonen utføres på farten gjennom et kall til .try_into(), for eksempel "let num = u32::from_be_bytes(slice.try_into()?)". For konverteringer som alltid lykkes (for eksempel fra type u8 til u32), er det lagt til en feiltype Ufeilbarlig, som tillater gjennomsiktig bruk
    TryFrom for alle eksisterende implementeringer av "Fra";

  • Funksjonen er avviklet CommandExt::before_exec, som tillot en behandler å bli utført før kjøring av exec, som ble utført i konteksten av en underordnet prosess forked etter fork()-kallet. Under slike forhold kan noen ressurser i den overordnede prosessen, som filbeskrivelser og kartlagte minneområder, dupliseres, noe som kan føre til udefinert oppførsel og feil drift av biblioteker.
    Det anbefales å bruke en usikker funksjon i stedet for before_exec CommandExt::pre_exec.

  • Stabiliserte fortegnede og usignerte atomære heltallstyper som varierer i størrelse fra 8 til 64 biter (f.eks. AtomicU8), samt signerte typer Ikke null[8|16|32|64|128].
  • En ny del av API-en har blitt flyttet til den stabile kategorien, inkludert Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub] ] og SystemTime-metodene er stabilisert ::checked_[add|sub]. Iter::from_fn og iter::successors funksjonene har blitt stabilisert;
  • For alle heltallstyper er metodene checked_pow, saturating_pow, wrapping_pow og overflowing_pow implementert;
  • Lagt til muligheten til å aktivere optimaliseringer på koblingsstadiet ved å spesifisere "-C linker-plugin-lto" byggealternativet.

Kilde: opennet.ru

Legg til en kommentar