Veröffentlichung der Programmiersprache Rust 1.39

Veröffentlicht Veröffentlichung der Systemprogrammiersprache Rost 1.39, 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:

  • Stabilisiert eine neue asynchrone Programmiersyntax basierend auf der „async“-Funktion, dem async move { ... }-Block und dem „.await“-Operator, die das Schreiben von Handlern erleichtert, die den Hauptbefehlsfluss nicht blockieren. Im Vergleich zur zuvor angebotenen API für asynchrone E/A sind async/.await-Konstrukte einfach zu verstehen, gut lesbar und ermöglichen die Implementierung komplexer asynchroner Interaktionen mithilfe vertrauter Flusskontrolltechniken basierend auf Schleifen, bedingten Anweisungen und Ausnahmen.

    Mit der Async-await-Syntax können Sie Funktionen erstellen, deren Ausführung angehalten, die Kontrolle an den Hauptthread zurückgegeben und die Ausführung dann an der Stelle fortgesetzt werden kann, an der sie aufgehört hat. Beispielsweise ist eine solche Pause bei der Verarbeitung von E/A erforderlich, in der andere Arbeiten erledigt werden können, während auf das Eintreffen der nächsten Daten gewartet wird. Mit „async fn“ und „async move“ definierte Funktionen und Blöcke geben ein Merkmal zurück Future, die eine verzögerte asynchrone Berechnungsdarstellung definiert. Mit dem „.await“-Operator können Sie direkt eine verzögerte Berechnung starten und das Ergebnis erhalten. Bis zum Aufruf von .await wird keine Aktion ausgeführt oder vorgeplant, sodass komplexe verschachtelte Konstrukte ohne zusätzlichen Aufwand erstellt werden können.

    async fn first_function() -> u32 { .. }
    ...
    let future = first_function();
    ...
    let result: u32 = future.await;

  • Stabilisiert „#![feature(bind_by_move_pattern_guards)]“, ermöglicht die Verwendung von Variablen mit dem Bindungstyp „by-move" in Vorlagen und verwenden Sie Verweise auf diese Variablen im Abschnitt "if" des Ausdrucks "Spiel". Folgende Konstruktionen sind nun beispielsweise erlaubt:

    fn main() {
    let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    Match-Array {
    nums
    wenn nums.iter().sum::() == 10

    => {
    drop(nums);
    }
    _ => nicht erreichbar!(),
    }
    }

  • Angabe erlaubt Attribute beim Definieren von Funktionsparametern, Abschlüssen und Funktionszeigern. Bedingte Kompilierungsattribute (cfg, cfg_attr), die die Diagnose über Lint steuern (zulassen, warnen, verweigern und verbieten), sowie zusätzliche Makroaufrufattribute werden unterstützt.

    fn len(
    #[cfg(windows)] Slice: &[u16], // Parameter unter Windows verwenden
    #[cfg(not(windows))] Slice: &[u8], // Verwendung in anderen Betriebssystemen
    ) -> usize {
    Slice.len()
    }

  • Warnungen vor Problemen, die bei der Überprüfung der Entlehnung von Variablen (Borrow Checker) mithilfe der NLL-Technik (Non-Lexical Lifetimes) festgestellt wurden, übersetzt in die Kategorie der schwerwiegenden Fehler ein. Erinnern wir uns daran, dass das Verifizierungssystem, das auf einem neuen Mechanismus zur Berücksichtigung der Lebensdauer geliehener Variablen basiert, es ermöglichte, einige Probleme zu identifizieren, die vom alten Verifizierungscode unbemerkt blieben. Da Fehlerausgaben bei solchen Prüfungen die Kompatibilität mit zuvor funktionierendem Code beeinträchtigen könnten, wurden zunächst Warnungen anstelle von Fehlern ausgegeben. Warnungen wurden jetzt bei der Ausführung im Rust 2018-Modus durch Fehler ersetzt. In der nächsten Version wird die Fehlerausgabe auch im Rust 2015-Modus implementiert, wodurch der alte Borrow-Checker endlich abgeschafft wird;
  • Für die Funktionen Vec::new, String::new, LinkedList::new, str::len, [T]::len wird das Attribut „const“ verwendet, das die Möglichkeit der Verwendung in jedem Kontext anstelle von Konstanten festlegt , str::as_bytes,
    abs, Wrapping_abs und Overflowing_abs;

  • Ein neuer Teil der APIs wurde in die stabile Kategorie überführt, darunter auch stabilisierte Methoden
    Pin::into_inner, Instant::checked_duration_since und Instant::saturating_duration_since;

  • Der Frachtpaketmanager hat jetzt die Möglichkeit, die Erweiterung „.toml“ für Konfigurationsdateien zu verwenden. Vorläufige Unterstützung für den Aufbau der Standardbibliothek direkt aus Cargo hinzugefügt. Das Flag „--workspace“ wurde hinzugefügt und ersetzt das umstrittene Flag „--all“. Den Metadaten wurde ein neues Feld hinzugefügt.veröffentlichen„, mit dem Sie Abhängigkeiten veröffentlichen können, indem Sie ein Git-Tag und eine Versionsnummer angeben. Testoption „-Ztimings“ hinzugefügt, um einen HTML-Bericht über die Ausführungszeiten verschiedener Kompilierungsstufen zu erstellen.
  • Im Rustc-Compiler umfassen Diagnosemeldungen das Abschneiden der Codeenden, die nicht in das Terminal passen. Bereitstellung der dritten Unterstützungsebene für Zielplattformen
    i686-unknown-uefi und sparc64-unknown-openbsd. Die dritte Ebene umfasst Basisunterstützung, jedoch ohne automatisierte Tests und Veröffentlichung offizieller Builds.

Source: opennet.ru

Kommentar hinzufügen