Veröffentlichung der Programmiersprache Rust 1.36

Veröffentlicht Veröffentlichung der Systemprogrammiersprache Rost 1.36, gegründet vom Mozilla-Projekt. Die Sprache konzentriert sich auf die Speichersicherheit, bietet eine automatische Speicherverwaltung und bietet eine Möglichkeit, eine hohe Aufgabenparallelität zu erreichen, ohne einen Garbage Collector oder eine Laufzeit zu verwenden.

Die automatische Speicherverwaltung von Rust befreit den Entwickler von Zeigermanipulationen und schützt vor Problemen, die durch Speichermanipulation auf niedriger Ebene entstehen, wie z. B. After-Free-Speicherzugriffe, Nullzeiger-Dereferenzierungen, Pufferüberläufe und dergleichen. Es wird ein Paketmanager entwickelt, um Bibliotheken zu verteilen, die Assemblierung sicherzustellen und Abhängigkeiten durch das Projekt zu verwalten. Kastenwagen, wodurch Sie mit einem Klick auf die Bibliotheken zugreifen können, die Sie für das Programm benötigen. Ein Repository wird zum Hosten von Bibliotheken unterstützt Kisten.io.

Haupt- Innovationen:

  • Merkmal stabilisiert Future, der einen Wert darstellt, dessen Auswertung bei der Verwendung von async/.await-Blöcken möglicherweise noch nicht abgeschlossen ist. Mit Future definierte asynchrone Werte ermöglichen es, weiterhin nützliche Arbeit im Thread auszuführen und gleichzeitig auf den Abschluss der Berechnungen eines bestimmten Werts zu warten;
  • Bibliothek stabilisiert zuweisen, das intelligente Zeiger und Sammlungen für die Verwaltung von im Speicher zugewiesenen Werten bereitstellt. Die Speicherzuweisung in std verwendet jetzt den Typ Ein Ding, die aus alloc erneut exportiert werden. Die separate Verwendung von alloc ist in Anwendungen sinnvoll, die nicht an std („#![no_std]“) gebunden sind, sowie in Bibliotheken, die für die Verwendung in ähnlichen Programmen ohne std konzipiert sind;
  • Um Überprüfungen auf korrekte Initialisierung von Werten zu umgehen vorgeschlagen Zwischentyp MaybeUnit, die als sicherere Alternative anstelle der Funktion mem::uninitialized verwendet werden kann. Die Funktion mem::uninitialized eignet sich zum schnellen Erstellen von Arrays, führt den Compiler jedoch in die Irre, da sie scheinbar initialisiert wurde, der Wert jedoch in Wirklichkeit nicht initialisiert bleibt. Mit MaybeUninit können Sie dem Compiler explizit mitteilen, dass der Wert nicht initialisiert ist, das damit verbundene mögliche undefinierte Verhalten berücksichtigen und auch Überprüfungen in Programmen durch „maybe_t:“ und eine schrittweise Initialisierung organisieren, um den Abschluss zu markieren mit dem Aufruf „.assume_init()“. Mit der Einführung von MaybeUninit ist die Funktion mem::uninitialized veraltet und wird nicht zur Verwendung empfohlen.
  • Die NLL-Technik (Non-Lexical Lifetimes), die das System zur Aufzeichnung der Lebensdauer geliehener Variablen erweiterte, wurde für die Sprache Rust 2015 stabilisiert (ursprünglich wurde NLL nur von Rust 2018 unterstützt). Anstatt Lebensdauern auf lexikalischer Ebene festzuschreiben, tut NLL dies auf der Ebene der Zeigermenge im Ausführungsflussdiagramm. Mit diesem Ansatz können Sie die Qualität der Überprüfung der Ausleihe von Variablen (Borrow Checker) erhöhen und die Ausführung einiger Arten von korrektem Code ermöglichen, deren Verwendung zuvor zu einem Fehler geführt hat. Das neue Verhalten erleichtert auch das Debuggen erheblich.
  • Neue Implementierung assoziativer Arrays enthalten HashMap, basierend auf der Anwendung der Struktur Schweizer Tisch (wird automatisch geladen hashbrown::HashMap, sofern nicht ausdrücklich anders angegeben, wie z. B. std::HashMap, das auf SipHash 1-3 basiert). Die Softwareoberfläche bleibt gleich und die für den Entwickler spürbaren Unterschiede laufen auf eine höhere Leistung und einen geringeren Speicherverbrauch hinaus;
  • Im Paketmanager Fracht hinzugefügt die Option „--offline“, die einen Betrieb ohne Zugriff auf das Netzwerk ermöglicht, bei dem bei der Installation von Abhängigkeiten nur im lokalen System zwischengespeicherte Pakete verwendet werden. Wenn sich die Abhängigkeit nicht im lokalen Cache befindet, wird ein Fehler ausgegeben. Um Abhängigkeiten vorab in den lokalen Cache zu laden, bevor Sie offline gehen, können Sie den Befehl „cargo fetch“ verwenden;
  • Die Möglichkeit, das Makro „dbg!“ aufzurufen, wurde implementiert. Angabe mehrerer Argumente;
  • Für Methoden wird das Attribut „const“ verwendet, das die Möglichkeit der Verwendung in jedem Kontext anstelle von Konstanten festlegt
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::dangling und
    NonNull::cast;

  • Ein neuer Teil der APIs wurde in die stabile Kategorie überführt, darunter auch stabilisierte Methoden
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::kopiert,
    BorrowMut (für Strings) und str::as_mut_ptr.

Source: opennet.ru

Kommentar hinzufügen