Rust 1.36 programmeringssprog udgivelse

offentliggjort frigivelse af systemprogrammeringssprog Rust 1.36, grundlagt af Mozilla-projektet. Sproget fokuserer på hukommelsessikkerhed, giver automatisk hukommelsesstyring og giver et middel til at opnå høj opgaveparallelisme uden at bruge en skraldeopsamler eller runtime.

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:

  • Egenskab stabiliseret Fremtid, som repræsenterer en værdi, hvis evaluering måske endnu ikke er afsluttet, mens du bruger async / .await-blokke. Asynkrone værdier defineret ved hjælp af Future gør det muligt at fortsætte med at udføre nyttigt arbejde i tråden, mens du samtidig venter på færdiggørelsen af ​​beregninger af en bestemt værdi;
  • Biblioteket er stabiliseret allok, som giver smarte pointere og samlinger til styring af hukommelsestildelte værdier. Hukommelsestildeling i std bruger nu typen En ting, som reeksporteres fra alloc. Separat brug af alloc giver mening i applikationer, der ikke er bundet til std ("#![no_std]"), såvel som i biblioteker designet til brug i lignende programmer uden std;
  • At omgå kontroller for korrekt initialisering af værdier foreslog mellemtype Måske Unit, som kan bruges i stedet for mem::uninitialized-funktionen som et sikrere alternativ. Funktionen mem::uninitialized er praktisk til hurtigt at oprette arrays, men den vildleder compileren, fordi den ser ud til at være initialiseret, men i virkeligheden forbliver værdien uinitialiseret. MaybeUninit giver dig mulighed for eksplicit at indikere over for compileren, at værdien er uinitialiseret, for at tage højde for den mulige udefinerede adfærd, der er forbundet med dette, og også at organisere kontrol i programmer gennem "maybe_t:" og trin-for-trin initialisering, hvilket markerer dens afslutning ved at bruge ".assume_init()"-kaldet. Med fremkomsten af ​​MaybeUninit er mem::uninitialized-funktionen blevet forældet og anbefales ikke til brug;
  • NLL-teknikken (Non-Lexical Lifetimes), som udvidede systemet til registrering af levetiden for lånte variabler, er blevet stabiliseret for Rust 2015-sproget (oprindeligt blev NLL kun understøttet af Rust 2018). I stedet for at forpligte levetider på det leksikalske niveau, gør NLL det på niveauet af sættet af pointere i udførelsesflowgrafen. Denne tilgang giver dig mulighed for at øge kvaliteten af ​​kontrol af lån af variabler (lån kontrol) og tillade udførelsen af ​​nogle typer korrekt kode, hvis brug tidligere førte til en fejl. Den nye adfærd gør også fejlfinding meget lettere;
  • Ny implementering af associative arrays inkluderet HashMap, baseret på anvendelsen af ​​strukturen schweizisk bord (automatisk indlæst hashbrown::HashMap, medmindre andet er udtrykkeligt angivet, såsom std::HashMap, som er baseret på SipHash 1-3). Softwaregrænsefladen forbliver den samme, og de forskelle, der er mærkbare for udvikleren, bunder i øget ydeevne og reduceret hukommelsesforbrug;
  • I pakkeforvalteren last tilføjet muligheden "--offline", som muliggør drift uden adgang til netværket, hvor kun pakker, der er cachelagret i det lokale system, bruges ved installation af afhængigheder. Hvis afhængigheden ikke er i den lokale cache, vil der blive smidt en fejl. For at forudindlæse afhængigheder i den lokale cache, før du går offline, kan du bruge kommandoen "cargo fetch";
  • Implementeret evnen til at kalde makroen "dbg!" angiver flere argumenter;
  • "const"-attributten, som bestemmer muligheden for at bruge i enhver sammenhæng i stedet for konstanter, bruges til metoder
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::dinglende og
    NonNull::cast;

  • En ny del af API'er er blevet overført til den stabile kategori, inklusive metoder, der er blevet stabiliseret
    opgave::Waker, opgave::Afstemning,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Læs::read_vectored, Write::write_vectored,
    Iterator::copied,
    BorrowMut (for strenge) og str::as_mut_ptr.

Kilde: opennet.ru

Tilføj en kommentar