Rust 1.36 Programméiersprooch Fräisetzung

publizéiert System Programméierungssprooch Verëffentlechung roscht 1.36, gegrënnt vum Mozilla-Projet. D'Sprooch konzentréiert sech op Erënnerung Sécherheet, stellt automatesch Erënnerung Gestioun, a stellt e Mëttel fir eng héich Aufgab parallelism erreechen ouni e Gerempels Sammelstécker oder Runtime benotzen.

Rust automatesch Erënnerung Gestioun befreit den Entwéckler vun Pointer Manipulatioun a schützt géint Problemer déi aus niddereg-Niveau Erënnerung Manipulatioun entstinn, wéi no-gratis Erënnerung Accès, Null Pointer dereferences, Puffer Iwwerstonnen, an dergläiche. E Package Manager gëtt entwéckelt fir Bibliothéiken ze verdeelen, Assemblée ze garantéieren an Ofhängegkeete vum Projet ze managen. cargo, erlaabt Iech d'Bibliothéike fir de Programm an engem Klick ze kréien. E Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten crates.io.

Haaptstrooss Innovatiounen:

  • Trait stabiliséiert Zukunft, deen e Wäert duerstellt deem seng Evaluatioun nach net ofgeschloss ka ginn wann Dir Async / .await Blocks benotzt. Asynchrone Wäerter definéiert mat Future maachen et méiglech weider nëtzlech Aarbecht am Fuedem auszeféieren, a gläichzäiteg op d'Réalisatioun vun de Berechnunge vun engem bestëmmte Wäert ze waarden;
  • Bibliothéik stabiliséiert alloc, déi Smart Pointer a Sammlunge fir d'Gestioun vun Erënnerung-allokéierte Wäerter ubitt. Memory Allocation am std benotzt elo den Typ Eng Saach, déi aus alloc. Separat Notzung vun Alloc mécht Sënn an Uwendungen net un std gebonnen ("#![no_std]"), wéi och a Bibliothéiken entworf fir an ähnleche Programmer ouni std ze benotzen;
  • Fir Contournement Kontrollen fir korrekt initialization vun Wäerter proposéiert Mëttelstuf Typ Vläicht Eenheet, déi kann amplaz vun der mem :: uninitialized Funktioun als sécher Alternativ benotzt ginn. D'Mem :: oninitialiséiert Funktioun ass praktesch fir séier Arrays ze kreéieren, awer et täuscht de Compiler well et schéngt initialiséiert ze sinn, awer a Wierklechkeet bleift de Wäert net initialiséiert. MaybeUninit erlaabt Iech explizit dem Compiler unzeginn datt de Wäert net initialiséiert ass, fir dat méiglecht ondefinéiert Verhalen dat assoziéiert ze berücksichtegen, an och Kontrollen a Programmer duerch "maybe_t:" a Schrëtt-fir-Schrëtt Initialiséierung z'organiséieren, wat seng Fäerdegstellung markéiert. mat der ".assume_init ()" Uruff. Mat dem Advent vu MaybeUninit ass d'mem::uninitialiséiert Funktioun ofgeschaaft ginn an ass net recommandéiert fir ze benotzen;
  • D'NLL (Non-Lexical Lifetimes) Technik, déi de System erweidert fir d'Liewensdauer vu geléinte Variablen opzehuelen, gouf fir d'Rust 2015 Sprooch stabiliséiert (ufanks gouf NLL nëmme vu Rust 2018 ënnerstëtzt). Amplaz Liewensdauer um lexikaleschen Niveau ze verpflichte, mécht NLL dat um Niveau vun der Satz vun Pointer an der Ausféierungsflossgrafik. Dës Approche erlaabt Iech d'Qualitéit vun der Iwwerpréiwung vum Prêt vu Variablen (Checker ausléinen) z'erhéijen an d'Ausféierung vun e puer Zorte vu korrekte Code z'erméiglechen, d'Benotzung vun deem virdru zu engem Feeler gefouert huet. Dat neit Verhalen mécht och Debugging vill méi einfach;
  • Nei Implementatioun vun assoziativen Arrays abegraff HashMap, baséiert op der Uwendung vun der Struktur Schwäizer Dësch (automatesch gelueden hashbrown :: HashMap, ausser explizit anescht uginn, wéi std :: HashMap, déi op SipHash 1-3 baséiert). D'Software-Interface bleift d'selwecht, an d'Differenzen, déi den Entwéckler bemierkbar sinn, kachen op eng erhéicht Leeschtung a reduzéierter Erënnerungsverbrauch;
  • Am Pak Manager cargo dobäi d'Optioun "--offline", déi d'Operatioun erlaabt ouni Zougang zum Netz ze kréien, an deem nëmme Packagen, déi am lokalen System cache sinn, benotzt ginn wann Dir Ofhängegkeeten installéiert. Wann d'Ofhängegkeet net am lokalen Cache ass, gëtt e Feeler geworf. Fir Ofhängegkeeten an de lokalen Cache vir ze lueden ier Dir offline geet, kënnt Dir de Kommando "cargo fetch" benotzen;
  • Implementéiert d'Fäegkeet fir de Makro "dbg!" e puer Argumenter uginn;
  • D'"const" Attribut, déi d'Méiglechkeet bestëmmt fir an all Kontext anstatt Konstanten ze benotzen, gëtt fir Methoden benotzt
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull :: dangling an
    NonNull::cast;

  • En neien Deel vun APIen gouf an déi stabil Kategorie transferéiert, dorënner Methoden déi stabiliséiert goufen
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Liesen::liesen_vektoréiert, Schreiwen::schreiwen_vektored,
    Iterator::kopéiert,
    BorrowMut (fir Strings) a str::as_mut_ptr.

Source: opennet.ru

Setzt e Commentaire