Veröffentlichung der Programmiersprache Rust 1.36

Veröffentlicht Release der Systemprogrammiersprache Rust 1.36, basierend auf dem Projekt von Mozilla. Die Sprache konzentriert sich auf sichere Speicherverwaltung, bietet automatisches Speichermanagement und stellt Werkzeuge zur Verfügung, um hohen Parallelismus bei der Ausführung von Aufgaben zu erreichen, ohne auf einen Garbage Collector und Runtime angewiesen zu sein.

Das automatische Speichermanagement in Rust befreit den Entwickler von der Manipulation von Zeigern und schützt vor Problemen, die aus der niederleveligen Speicherbearbeitung resultieren, wie das Zugreifen auf freigegebenen Speicher, Dereferenzierung von Nullzeigern und Buffer-Überläufen. Für die Verteilung von Bibliotheken, den Aufbau und das Management von Abhängigkeiten entwickelt sich der Paketmanager Cargo, der es ermöglicht, die benötigten Bibliotheken für das Programm mit einem Klick zu erhalten. Für die Bereitstellung von Bibliotheken wird das Repository crates.io.

Haupt Neuheiten:

  • Stabilisiertes Trait Future, das einen Wert repräsentiert, dessen Berechnung möglicherweise noch nicht abgeschlossen ist, während async / .await-Blöcke verwendet werden. Die durch Future bestimmten asynchronen Werte ermöglichen es, die Ausführung im Arbeits-Thread fortzusetzen, während gleichzeitig auf den Abschluss der Berechnungen eines bestimmten Wertes gewartet wird;
  • Stabilisierte Bibliothek alloc, die Smart Pointer und Sammlungen für die Verwaltung von im Speicher platzierten Werten bereitstellt. Für die Speicherzuweisung wird nun der Typ Vec, der aus alloc re-exportiert wird, verwendet. Die separate Verwendung von alloc macht in Anwendungen, die nicht an std gebunden sind («#![no_std]»), sowie in Bibliotheken, die für den Einsatz in solchen Programmen ohne std konzipiert sind, Sinn;
  • Um die Überprüfungen der ordnungsgemäßen Initialisierung von Werten zu umgehen, wurde angeboten Zwischentyp MaybeUninit, der als sicherere Alternative zur Funktion mem::uninitialized verwendet werden kann. Die Funktion mem::uninitialized ist praktisch zum schnellen Erstellen von Arrays, führt jedoch den Compiler in die Irre, da sie den Anschein einer Initialisierung erweckt, während der tatsächliche Wert uninitialisiert bleibt. MaybeUninit ermöglicht es, dem Compiler explizit anzuzeigen, dass der Wert nicht initialisiert ist, und die damit verbundenen möglichen undefinierten Verhaltensweisen zu berücksichtigen. Darüber hinaus können in Programmen Überprüfungen über „maybe_t:“ und eine schrittweise Initialisierung organisiert werden, wobei deren Abschluss durch den Aufruf „.assume_init()“ gekennzeichnet wird. Mit der Einführung von MaybeUninit wird die Funktion mem::uninitialized als veraltet betrachtet und nicht empfohlen.
  • Die NLL-Technik (Non-Lexical Lifetimes), die das System zur Verwaltung der Lebensdauer von entliehenen Variablen erweitert hat, wurde für die Rust-Sprache von 2015 stabilisiert (zuvor wurde NLL nur in Rust 2018 unterstützt). Anstelle der lebenszyklusbezogenen Bindung auf lexikalischer Ebene erfolgt die Verwaltung auf der Ebene der Zeigergruppen im Ausführungsflussdiagramm. Dieser Ansatz verbessert die Qualität der Überprüfung der entliehenen Variablen (Borrow Checker) und ermöglicht die Ausführung bestimmter Arten von korrektem Code, die zuvor zu Fehlern führten. Das neue Verhalten vereinfacht auch die Fehlersuche erheblich.
  • Eine neue Implementierung von assoziativen Arrays wurde hinzugefügt HashMap, basierend auf der Anwendung der Struktur Swiss Table (wird automatisch geladen hashbrown::HashMap, es sei denn, es wird ausdrücklich etwas anderes angegeben, z. B. std::HashMap, das auf SipHash 1-3 basiert). Die Programmierschnittstelle bleibt unverändert, während die bemerkenswerten Unterschiede für Entwickler in einer verbesserten Leistung und einem geringeren Speicherverbrauch bestehen;
  • Im Paketmanager cargo hinzugefügt Die Option „—offline“, die den Betrieb ohne Netzwerkzugriff ermöglicht, wobei nur die im lokalen System zwischengespeicherten Pakete zur Installation von Abhängigkeiten verwendet werden. Wenn eine Abhängigkeit im lokalen Cache nicht vorhanden ist, wird ein Fehler ausgegeben. Um Abhängigkeiten im lokalen Cache vor dem Wechsel in den Offline-Modus vorab herunterzuladen, kann der Befehl „cargo fetch“ verwendet werden;
  • Die Möglichkeit, das Makro „dbg!“ mit mehreren Argumenten aufzurufen, wurde implementiert;
  • Das Kennzeichen „const“, das die Verwendung an beliebiger Stelle anstelle von Konstanten definiert, wurde für Methoden angewendet;
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::dangling und
    NonNull::cast;
  • Eine neue Charge von APIs wurde als stabil eingestuft, darunter wurden die Methoden stabilisiert
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::copied,
    BorrowMut (für Strings) und str::as_mut_ptr.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster