Veröffentlichung der Programmiersprache Rust 2021 (1.56)

Die Veröffentlichung der Systemprogrammiersprache Rust 1.56, die vom Mozilla-Projekt gegründet wurde, jetzt aber unter der Schirmherrschaft der unabhängigen gemeinnützigen Organisation Rust Foundation entwickelt wird, wurde veröffentlicht. Neben der regulären Versionsnummer trägt die Veröffentlichung auch die Bezeichnung Rust 2021 und markiert die Stabilisierung der in den letzten drei Jahren vorgeschlagenen Änderungen. Rust 2021 wird in den nächsten drei Jahren auch als Grundlage für Feature-Builds dienen, ähnlich wie die Version Rust 2018 in den letzten drei Jahren die Grundlage für die Sprachentwicklung war.

Um die Kompatibilität aufrechtzuerhalten, können Entwickler die Tags „2015“, „2018“ und „2021“ in ihren Programmen verwenden, um Programme mit Sprachstatus-Slices zu verknüpfen, die ausgewählten Rust-Editionen entsprechen. Überarbeitungen wurden eingeführt, um inkompatible Änderungen zu trennen, und werden in den Metadaten von Frachtpaketen über das Feld „Edition“ im Abschnitt „[Paket]“ konfiguriert. So beinhaltet die Edition 2018 Funktionalitäten, die Ende 2018 stabilisiert wurden und deckt auch alle zukünftigen Änderungen ab, die nicht gegen die Kompatibilität verstoßen. Die Ausgabe 2021 enthält zusätzlich kompatibilitätsverletzende Funktionen, die in der aktuellen Version 1.56 vorgeschlagen und für die zukünftige Implementierung freigegeben wurden. Neben der Sprache selbst berücksichtigen die Redakteure auch den Stand der Tools und Dokumentation.

Die wichtigsten in Rust 2021 behobenen Inkompatibilitäten sind:

  • Separate Erfassung in Schließungen – Schließungen können jetzt einzelne Feldnamen anstelle der gesamten ID erfassen. Beispiel: „|| „ax + 1“ erfasst nur „ax“ anstelle von „a“.
  • Mit der IntoIterator-Eigenschaft für Arrays: array.into_iter() können Sie die Elemente eines Arrays nach Wert und nicht nach Referenz durchlaufen.
  • Die Verarbeitung von „|“-Ausdrücken wurde in „macro_rules“ geändert (logische ODER-Verknüpfung) in Mustern – Der „:pat“-Bezeichner in Übereinstimmungen berücksichtigt jetzt die Muster „A | B".
  • Der Cargo-Paketmanager enthält standardmäßig die zweite Version des Feature-Resolvers, dessen Unterstützung in Rust 1.51 eingeführt wurde.
  • Die Merkmale TryFrom, TryInto und FromIterator wurden dem Prelude-Standardbibliotheksmodul hinzugefügt.
  • Die Panic!(..)- und Assertion!(expr, ..)-Makros verwenden jetzt immer format_args!(..), um Zeichenfolgen zu formatieren, ähnlich wie println!().
  • Die Ausdrücke ident#, ident"…" und ident'…' sind in der Syntax der Sprache reserviert.
  • Die Warnungen „bare_trait_objects“ und „ellipsis_inclusive_range_patterns“ wurden in die Fehlerkategorie verschoben.

Neu in Rust 1.56:

  • In Cargo.toml wurde im Abschnitt „[Paket]“ das Feld „rust-version“ hinzugefügt, über das Sie die minimal unterstützte Version von Rust für das Crate-Paket bestimmen können. Wenn die aktuelle Version nicht mit dem angegebenen Parameter übereinstimmt, bricht Cargo mit einem Fehler ab.
  • Beim Mustervergleich mit „binding @ pattern“-Ausdrücken wird die Angabe zusätzlicher Bindungen unterstützt (z. B. „let Matrix @ Matrix { row_len, .. } = get_matrix();“).
  • Ein neuer Teil der API wurde in die Kategorie „stabil“ verschoben, einschließlich der Stabilisierung der Methoden und Implementierungen von Merkmalen:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • In Funktionen wird das Attribut „const“ verwendet, das die Möglichkeit seiner Verwendung in jedem Kontext anstelle von Konstanten festlegt
    • std::mem::transmute
    • [T]::zuerst
    • [T]::split_first
    • [T]::zuletzt
    • [T]::split_last
  • Der Compiler wurde auf die Verwendung von LLVM Version 13 umgestellt.
  • Implementierung der Level-64-Unterstützung für die Plattform aarch32-apple-ios-sim und Level-XNUMX-Unterstützung für die Plattformen powerpc-unknown-freebsd und riscvXNUMXimc-esp-espidf. Die dritte Ebene beinhaltet grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Fähigkeit, den Code zu erstellen.

Denken Sie daran, dass sich die Rust-Sprache auf eine sichere Speicherverwaltung konzentriert, eine automatische Speicherverwaltung bereitstellt und eine Möglichkeit bietet, eine hohe Parallelität der Jobausführung zu erreichen, während auf die Verwendung eines Garbage Collectors und einer Laufzeit verzichtet wird (die Laufzeit beschränkt sich auf die grundlegende Initialisierung und Wartung der). Standardbibliothek).

Die automatische Speicherverwaltung von Rust bewahrt den Entwickler vor Fehlern bei der Manipulation von Zeigern und schützt vor Problemen, die durch Speichermanipulation auf niedriger Ebene entstehen, wie z. B. Zugriff auf einen Speicherbereich, nachdem dieser freigegeben wurde, Dereferenzierung von Nullzeigern, Pufferüberläufe usw. Um Bibliotheken zu verteilen, Builds bereitzustellen und Abhängigkeiten zu verwalten, entwickelt das Projekt den Cargo-Paketmanager. Das crates.io-Repository wird zum Hosten von Bibliotheken unterstützt.

Source: opennet.ru

Kommentar hinzufügen