Rust 1.36 programmeertaal release

gepubliceerd systeem programmeertaal release Roest 1.36, opgericht door het Mozilla-project. De taal richt zich op geheugenveiligheid, biedt automatisch geheugenbeheer en biedt een manier om een ​​hoge taakparallelliteit te bereiken zonder gebruik te maken van een garbage collector of runtime.

Het automatische geheugenbeheer van Rust bevrijdt de ontwikkelaar van pointermanipulatie en beschermt tegen problemen die voortkomen uit geheugenmanipulatie op laag niveau, zoals after-free geheugentoegang, null pointer-dereferenties, bufferoverruns en dergelijke. Er wordt een pakketbeheerder ontwikkeld om bibliotheken te distribueren, de assemblage te garanderen en de afhankelijkheden van het project te beheren. Cargo, zodat u met één klik de bibliotheken kunt verkrijgen die nodig zijn voor het programma. Er wordt een repository ondersteund om bibliotheken te hosten kratten.io.

De belangrijkste innovaties:

  • Karakteristiek gestabiliseerd toekomst, wat een waarde vertegenwoordigt waarvan de evaluatie mogelijk nog niet is voltooid tijdens het gebruik van async / .await-blokken. Asynchrone waarden gedefinieerd met Future maken het mogelijk om door te gaan met het uitvoeren van nuttig werk in de thread, terwijl u tegelijkertijd wacht op de voltooiing van berekeningen van een bepaalde waarde;
  • Bibliotheek gestabiliseerd toewijzen, dat slimme verwijzingen en verzamelingen biedt voor het beheren van aan geheugen toegewezen waarden. Geheugentoewijzing in std gebruikt nu het type vec, die opnieuw worden geëxporteerd vanuit alloc. Afzonderlijk gebruik van alloc is zinvol in toepassingen die niet aan std zijn gekoppeld (“#![no_std]”), evenals in bibliotheken die zijn ontworpen voor gebruik in soortgelijke programma’s zonder std;
  • Om controles op correcte initialisatie van waarden te omzeilen voorgesteld tussensoort Misschien Eenheid, die kan worden gebruikt in plaats van de mem::uninitialized-functie als een veiliger alternatief. De functie mem::uninitialized is handig voor het snel maken van arrays, maar misleidt de compiler omdat deze geïnitialiseerd lijkt te zijn, maar in werkelijkheid blijft de waarde niet geïnitialiseerd. Met MaybeUninit kunt u expliciet aan de compiler aangeven dat de waarde niet is geïnitialiseerd, om rekening te houden met het mogelijke ongedefinieerde gedrag dat hiermee gepaard gaat, en ook om controles in programma's te organiseren via "maybe_t:" en stapsgewijze initialisatie, waarmee de voltooiing ervan wordt gemarkeerd met behulp van de aanroep “.assume_init()”. Met de komst van MaybeUninit is de functie mem::uninitialized verouderd en wordt deze niet aanbevolen voor gebruik;
  • De NLL-techniek (Non-Lexical Lifetimes), waarmee het systeem voor het vastleggen van de levensduur van geleende variabelen werd uitgebreid, is gestabiliseerd voor de Rust 2015-taal (aanvankelijk werd NLL alleen ondersteund door Rust 2018). In plaats van levens op lexicaal niveau vast te leggen, doet NLL dit op het niveau van de reeks pointers in de uitvoeringsstroomgrafiek. Met deze aanpak kunt u de kwaliteit van het controleren van het lenen van variabelen (lenencontrole) verhogen en de uitvoering van sommige soorten correcte code mogelijk maken, waarvan het gebruik eerder tot een fout leidde. Het nieuwe gedrag maakt het debuggen ook veel eenvoudiger;
  • Nieuwe implementatie van associatieve arrays inbegrepen Hash kaart, gebaseerd op de toepassing van de structuur Zwitserse tafel (automatisch geladen hashbrown::HashMap, tenzij expliciet anders vermeld, zoals std::HashMap, dat is gebaseerd op SipHash 1-3). De software-interface blijft hetzelfde, en de verschillen die voor de ontwikkelaar merkbaar zijn, komen neer op betere prestaties en minder geheugengebruik;
  • In de pakketbeheerder vracht toegevoegd de “--offline” optie, die werking mogelijk maakt zonder toegang tot het netwerk, waarbij alleen pakketten die in de cache in het lokale systeem zijn opgeslagen, worden gebruikt bij het installeren van afhankelijkheden. Als de afhankelijkheid zich niet in de lokale cache bevindt, wordt er een fout gegenereerd. Om afhankelijkheden vooraf in de lokale cache te laden voordat u offline gaat, kunt u de opdracht “cargo fetch” gebruiken;
  • De mogelijkheid geïmplementeerd om de macro "dbg!" verschillende argumenten aangeven;
  • Voor methoden wordt het attribuut “const” gebruikt, dat de mogelijkheid bepaalt om in elke context te gebruiken in plaats van constanten
    Indeling::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::bungelend en
    NietNull::cast;

  • Een nieuw deel van de API's is overgebracht naar de stabiele categorie, inclusief methoden die zijn gestabiliseerd
    taak::Waker, taak::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Lezen::read_vectored, Schrijven::write_vectored,
    Iterator::gekopieerd,
    BorrowMut (voor strings) en str::as_mut_ptr.

Bron: opennet.ru

Voeg een reactie