Veröffentlichung der Programmiersprache Rust 1.42

Veröffentlicht Veröffentlichung der Systemprogrammiersprache Rost 1.42gegründet vom Mozilla-Projekt. Die Sprache konzentriert sich auf eine sichere Speicherverwaltung, bietet eine automatische Speicherverwaltung und bietet die Möglichkeit, eine hohe Jobparallelität zu erreichen und gleichzeitig die Verwendung eines Garbage Collectors zu vermeiden Laufzeit.

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:

  • Hinzugefügt von Unterstützung für Vorlagen zum Abgleichen von Teilen von Slices (dynamische Arrays, Slice). Früher waren exakte Übereinstimmungen zulässig, aber jetzt ist es möglich, mit „..“ gekennzeichnete Konstrukte zu verwenden, um die verbleibenden Elemente des Arrays abzudecken. Zum Beispiel:

    fn foo(words: &[&str]) {
    Wörter zuordnen {

    // prüft die Startelemente des Arrays und ignoriert
    Elemente, die ihnen folgen
    ["Hallo", "Welt", "!", ..] => println!("Hallo Welt!"),

    // prüft die ersten beiden Elemente „Foo“ und „Bar“, der Rest ist nicht wichtig
    ["Foo", "Bar", ..] => println!("Baz"),

    // ignoriere alles, aber das letzte Element muss „!“ sein.
    [.., „!“] => println!(“!!!“),

    // im Start-Slice nehmen wir alles auf, außer dem letzten Element, das „z“ sein sollte
    [start @ .., "z"] => println!("beginnt mit: {:?}", start),

    // Im End-Slice platzieren wir alles außer dem ersten Element, das „a“ sein sollte.
    ["a", end @ ..] => println!("endet mit: {:?}", end),

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

  • Ein neues Makro „matches!“ wurde hinzugefügt, das einen Ausdruck und ein Muster als Eingabe akzeptiert und „true“ zurückgibt, wenn das Muster mit dem Ausdruck übereinstimmt. Die Vorlage kann „|“-Operationen verwenden und wenn".

    match self.partial_cmp(other) {
    Einige (weniger) => wahr,
    _ => falsch,
    }

    Übereinstimmungen!(self.partial_cmp(other), Some(Less))

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

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

  • Bei falscher Verwendung werden Panikmeldungen angezeigt
    Die Typen Option und Ergebnis zeigen jetzt Zeilennummern mit einem Link zum Code an, der den problematischen Aufruf durchgeführt hat, und nicht mit Links zum Code, der den Aufruf in libcore implementiert. Die Änderung wirkt sich beispielsweise auf Aufrufe von „unwrap“ und „expect“ über Option::None aus oder stürzt ab, wenn „unwrap_err“, „expect“, „expect_err“ und ähnliche Methoden für den Typ „Result“ verwendet werden.

  • Der Cargo-Paketmanager ermöglicht die automatische Ersetzung von „proc_macro crate“ in den „extern“-Block für Pakete mit prozeduralen Makros. Diese Änderung ermöglicht die Anwendung der „use“-Direktive auf prozedurale Makros, ohne dass „extern crate proc_macro;“ im Code angegeben werden muss. Wenn das Programm beispielsweise die Zeile „use proc_macro::TokenStream;“ verwendet, funktioniert der Code jetzt weiterhin, wenn „extern crate proc_macro;“ daraus entfernt wird.
  • Die Fähigkeiten der Standardbibliothek wurden erweitert. In iter::Empty hinzugefügt Sende- und Synchronisierungsunterstützung für alle T-Werte.
    Anrufe Pin::{map_unchecked, map_unchecked_mut} geliefert von der Notwendigkeit, einen Typwert für die „Sized“-Implementierung zurückzugeben.
    In io::Cursor umgesetzt PartialEq und Gl. Das Attribut „const“ bestimmt die Möglichkeit der Verwendung in jedem Kontext anstelle von Konstanten. angewandt für die Layout::new-Methode.

  • Ein neuer Teil der API wurde in die stabile Kategorie übertragen, einschließlich der stabilisierten 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 ist veraltet.
  • Bietet Second-Level-Unterstützung für die Plattformen armv7a-none-eabi und riscv64gc-unknown-linux-gnu. Unterstützung für die Standardbibliothek für die Plattform riscv64gc-unknown-linux-gnu wurde bereitgestellt.
    Apple 32-Bit-Plattformen degradiert bis zur dritten Supportebene, die Basisunterstützung impliziert, jedoch ohne automatisierte Tests und Veröffentlichung offizieller Builds. Die Herabstufung der Unterstützung ist darauf zurückzuführen, dass Apple keine 32-Bit-Plattformen mehr unterstützt.

Source: opennet.ru

Kommentar hinzufügen