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 Funktion „async“, dem Block „async move { ... }“ und dem Operator „.await“, die das Schreiben von Handlern erleichtern, die den Hauptthread nicht blockieren. Im Vergleich zur zuvor vorgeschlagenen API für asynchrone E/A sind die async/.await-Konstrukte leicht verständlich und lesbar und ermöglichen Ihnen die Implementierung komplexer asynchroner Interaktionen mithilfe vertrauter Kontrollflusstechniken auf der Grundlage von Schleifen, Bedingungen 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 dort fortgesetzt werden kann, wo sie unterbrochen wurde. Eine solche Pause ist beispielsweise bei der Verarbeitung von Ein-/Ausgaben erforderlich, in der andere Arbeiten ausgeführt werden können, während auf das Eintreffen der nächsten Datenportion gewartet wird. Funktionen und Blöcke, die über "async fn" und "async move" definiert sind, geben ein Merkmal zurück Future, das die Darstellung einer verzögerten asynchronen Berechnung definiert. Die verzögerte Berechnung kann direkt gestartet und das Ergebnis mit dem Operator ".await" abgerufen werden. Vor dem Aufruf von ".await" werden keine Aktionen ausgeführt oder geplant, wodurch komplexe verschachtelte Konstrukte ohne zusätzlichen Aufwand erstellt werden können.

    async fn first_function() -> u32 { .. }
    ...
    lass Zukunft = erste_Funktion();
    ...
    let-Ergebnis: u32 = future.await;

  • Stabilisiert "#![feature(bind_by_move_pattern_guards)]" ermöglicht die Verwendung von Variablen mit dem Bindungstyp "durch Bewegung" in Vorlagen und verwenden Sie Verweise auf diese Variablen im "if"-Abschnitt des Ausdrucks "Spiel". Beispielsweise sind nun folgende Konstruktionen erlaubt:

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

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

    => {
    Tropfen(Zahlen);
    }
    _ => nicht erreichbar!(),
    }
    }

  • Angabe ist erlaubt Attribute beim Definieren von Parametern von Funktionen, Closures und Funktionszeigern. Bedingte Kompilierungsattribute (cfg, cfg_attr), die die Diagnose über Lint (Zulassen, Warnen, Verweigern und Verboten) steuern, sowie Hilfsattribute von Makroaufrufen werden unterstützt.

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

  • Warnungen über Probleme, die vom Borrow Checker mithilfe der NLL-Technik (Non-Lexical Lifetimes) erkannt wurden, übersetzt in die Kategorie der schwerwiegenden Fehler. Zur Erinnerung: Das Verifizierungssystem, das auf dem neuen Mechanismus zur Berücksichtigung der Lebensdauer geliehener Variablen basiert, ermöglichte es, einige Probleme zu identifizieren, die vom alten Verifizierungscode unbemerkt geblieben waren. Da die Fehlerausgabe bei solchen Prüfungen die Kompatibilität mit zuvor funktionierendem Code beeinträchtigen konnte, wurden zunächst Warnungen anstelle von Fehlern ausgegeben. Beim Arbeiten im Rust-2018-Modus wurden Warnungen nun durch Fehler ersetzt. In der nächsten Version wird die Fehlerausgabe auch im Rust-2015-Modus implementiert, wodurch der alte Borrow-Checker endgültig entfällt;
  • Das Flag „const“, das die Möglichkeit der Verwendung in jedem Kontext anstelle von Konstanten bestimmt, wird auf die Funktionen Vec::new, String::new, LinkedList::new, str::len, [T]::len, str::as_bytes angewendet.
    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 Cargo-Paketmanager unterstützt jetzt die Verwendung der Erweiterung „.toml“ für Konfigurationsdateien. Vorläufige Unterstützung für den Aufbau der Standardbibliothek direkt aus Cargo hinzugefügt. Das Flag „--workspace“ wurde hinzugefügt und ersetzt das mehrdeutige Flag „--all“. Den Metadaten wurde ein neues Feld hinzugefügt:veröffentlichen", das die Veröffentlichung von Abhängigkeiten durch Angabe eines Git-Tags und einer Versionsnummer ermöglicht. Eine Testoption „-Ztimings“ wurde hinzugefügt, um einen HTML-Bericht über die Ausführungszeit verschiedener Phasen der Kompilierung zu generieren.
  • Der rustc-Compiler hat in Diagnosemeldungen die Funktion „Tail Trimming“ für Code aktiviert, der nicht in das Terminal passt. Dritte Ebene der Unterstützung für Zielplattformen bereitgestellt
    i686-unknown-uefi und sparc64-unknown-openbsd. Die dritte Ebene beinhaltet grundlegende Unterstützung, jedoch ohne automatisierte Tests und Veröffentlichung offizieller Builds.

Source: opennet.ru

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