Rust 1.36 programspråk release

publiceras version av systemprogrammeringsspråk Rost 1.36, grundat av Mozilla-projektet. Språket fokuserar på minnessäkerhet, tillhandahåller automatisk minneshantering och tillhandahåller ett sätt att uppnå hög arbetsparallellism utan att använda en sophämtare eller körtid.

Rusts automatiska minneshantering frigör utvecklaren från pekarmanipulation och skyddar mot problem som uppstår från minnesmanipulation på låg nivå, såsom efterfri minnesåtkomst, nollpekaredereferenser, buffertöverskridningar och liknande. En pakethanterare utvecklas för att distribuera bibliotek, säkerställa montering och hantera beroenden av projektet. Laddning, vilket gör att du kan få de bibliotek du behöver för programmet med ett klick. Ett arkiv stöds för värdbibliotek lådor.io.

Den huvudsakliga innovationer:

  • Egenskapen stabiliserades Framtida, som representerar ett värde vars utvärdering kanske inte har slutförts när du använder async / .await-block. Asynkrona värden som definieras med Future gör det möjligt att fortsätta utföra användbart arbete i tråden, samtidigt som man väntar på att beräkningarna av ett visst värde ska slutföras;
  • Biblioteket stabiliserats allok, som tillhandahåller smarta pekare och samlingar för hantering av minnestilldelade värden. Minnestilldelning i std använder nu typen vec, som återexporteras från alloc. Separat användning av alloc är meningsfullt i applikationer som inte är bundna till std ("#![no_std]"), såväl som i bibliotek utformade för användning i liknande program utan std;
  • För att kringgå kontroller för korrekt initiering av värden föreslagen mellantyp Kanske Unit, som kan användas istället för funktionen mem::uninitialized som ett säkrare alternativ. Funktionen mem::uninitialized är bekväm för att snabbt skapa arrayer, men den vilseleder kompilatorn eftersom den verkar ha initierats, men i verkligheten förblir värdet oinitierat. MaybeUninit låter dig uttryckligen indikera för kompilatorn att värdet är oinitierat, för att ta hänsyn till det möjliga odefinierade beteendet som är associerat med detta, och även organisera kontroller i program genom "maybe_t:" och steg-för-steg-initiering, vilket markerar att det är slutfört med anropet ".assume_init()". Med tillkomsten av MaybeUninit har mem::uninitialized-funktionen föråldrats och rekommenderas inte för användning;
  • NLL-tekniken (Non-Lexical Lifetimes), som utökade systemet för att registrera livslängden för lånade variabler, har stabiliserats för Rust 2015-språket (initialt stöddes NLL endast av Rust 2018). Istället för att bestämma livstider på lexikal nivå, gör NLL det på nivån för uppsättningen av pekare i exekveringsflödesdiagrammet. Detta tillvägagångssätt gör att du kan öka kvaliteten på att kontrollera lån av variabler (låna checker) och tillåta exekvering av vissa typer av korrekt kod, vars användning tidigare ledde till ett fel. Det nya beteendet gör också felsökningen mycket lättare;
  • Ny implementering av associativa arrayer ingår HashMap, baserat på tillämpningen av strukturen schweizisk bord (laddas automatiskt hashbrown::HashMap, om inte annat uttryckligen anges, såsom std::HashMap, som är baserat på SipHash 1-3). Mjukvarugränssnittet förblir detsamma, och skillnaderna märkbara för utvecklaren kokar ner till ökad prestanda och minskad minnesförbrukning;
  • I paketförvaltaren last Lagt till alternativet "--offline", som möjliggör drift utan åtkomst till nätverket, där endast paket cachade i det lokala systemet används vid installation av beroenden. Om beroendet inte finns i den lokala cachen kommer ett fel att visas. För att förladda beroenden i den lokala cachen innan du går offline, kan du använda kommandot "cargo fetch";
  • Implementerade möjligheten att kalla makrot "dbg!" anger flera argument;
  • Attributet "const", som bestämmer möjligheten att använda i alla sammanhang istället för konstanter, används för metoder
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull:: dinglande och
    NonNull::cast;

  • En ny del av API:er har överförts till den stabila kategorin, inklusive metoder som har stabiliserats
    uppgift::Waker, uppgift::Omröstning,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::copied,
    BorrowMut (för strängar) och str::as_mut_ptr.

Källa: opennet.ru

Lägg en kommentar