Veröffentlichung der Programmiersprache Rust 1.42

Veröffentlicht Release der Systemprogrammiersprache Rust 1.42, entwickelt von Mozilla. Die Sprache konzentriert sich auf sichere Speicherverwaltung, bietet automatisches Speichermanagement und stellt Mittel zur Verfügung, um hohen Parallelismus bei der Aufgabenbearbeitung zu erreichen, ohne einen Garbage Collector verwenden zu müssen und Laufzeit.

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:

  • Hinzugefügt Unterstützung für das Abgleichen von Elementen in Slices (dynamischen Arrays). Während zuvor nur exakte Übereinstimmungen erlaubt waren, wurde nun die Möglichkeit hinzugefügt, Konstruktionen mit dem Label „..“ zu verwenden, um die verbleibenden Elemente des Arrays abzudecken. Zum Beispiel:

    fn foo(words: &[&str]) {
    match words {

    // проверяет начальные элементы массива с игнорированием
    nachfolgende Elemente
    [„Hello“, „World“, „!“, ..] => println!(„Hello World!“),

    // проверяет первые два элемента «Foo» и «Bar», а остальное не важно
    [„Foo“, „Bar“, ..] => println!(„Baz“),

    // игнорируем всё, но последний элемент должен быть «!».
    [.., „!“] => println!(„!!!“),

    // в срез start включаем всё, кроме последнего элемента, который должен быть «z»
    [start @ .., „z“] => println!(„beginnt mit: {:?}“, start),

    // в срез end помещаем всё, кроме первого элемента, который должен быть «a».
    [„a“, end @ ..] => println!(„endet mit: {:?}“, end),

    rest => println!(„{:?}“, rest),
    }
    }

  • Ein neuer Makro „matches!“ wurde hinzugefügt, der einen Ausdruck und ein Muster entgegennimmt und „true“ zurückgibt, wenn das Muster mit dem Ausdruck übereinstimmt. Im Muster können die Operationen „|“ und „if“ verwendet werden.

    match self.partial_cmp(other) {
    Some(Less) => true,
    _ => false,
    }

    matches!(self.partial_cmp(other), Some(Less))

    let foo = 'f';
    assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));

    let bar = Some(4);
    assert!(matches!(bar, Some(x) if x > 2));

  • In Panic-Nachrichten, die bei falscher Verwendung ausgegeben werden
    Bei Option und Result werden nun die Zeilennummern mit Bezug auf den Code angezeigt, der den problematischen Aufruf durchgeführt hat, anstatt auf den Implementierungscode des Aufrufs in libcore. Zum Beispiel betrifft die Änderung Aufrufe von unwrap und expect bei Option::None oder Fehler beim Verwenden von unwrap_err, expect, expect_err und ähnlichen Methoden für den Typ Result.
  • Im Paketmanager Cargo wurde die automatische Einfügung des „proc_macro crate“ in den Block „extern“ für Pakete mit prozeduralen Makros sichergestellt. Diese Änderung ermöglicht die Verwendung der „use“-Direktive für prozedurale Makros, ohne dass im Code „extern crate proc_macro;“ angegeben werden muss. Wenn im Programm beispielsweise die Zeile „use proc_macro::TokenStream;“ verwendet wird, bleibt der Code nun funktionstüchtig, selbst wenn „extern crate proc_macro;“ entfernt wird.
  • Die Funktionen der Standardbibliothek wurden erweitert. In iter::Empty hinzugefügt wurde die Unterstützung für Send und Sync für beliebige Werte T implementiert.
    Die Aufrufe von Pin::{map_unchecked, map_unchecked_mut} befreit entspringen der Notwendigkeit, einen Typwert für die Implementierung von „Sized“ zurückzugeben.
    In io::Cursor werden umgesetzt PartialEq und Eq. Das „const“-Attribut, das die Verwendung in jedem Kontext anstelle von Konstanten definiert, wurde für die Methode Layout::new angewendet.
  • Eine neue Serie von APIs wurde in die Kategorie stabil eingestuft, einschließlich der Stabilisierung von CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    ManuallyDrop::take,
    ptr::slice_from_raw_parts_mut und ptr::slice_from_raw_parts.
  • Die Methode Error::description wurde als veraltet erklärt.
  • Es wurde eine zweite Support-Ebene für die Plattformen armv7a-none-eabi und riscv64gc-unknown-linux-gnu bereitgestellt. Unterstützung für die Standardbibliothek für die Plattform riscv64gc-unknown-linux-gnu wurde sichergestellt.
    32-Bit-Plattformen von Apple wurden auf die dritte Unterstützungsstufe herabgestuft, die grundlegende Unterstützung, aber keine automatisierten Tests und Veröffentlichung offizieller Builds umfasst. Die Herabstufung der Unterstützungsstufe wurde durch die Einstellung des Supports von Apple für 32-Bit-Plattformen bedingt.

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