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 in ihren Programmen die Bezeichnungen „2015“, „2018“ und „2021“ verwenden, um ihre Programme an die Sprachstatus-Slices zu binden, die ihren gewählten Rust-Editionen entsprechen. Editionen wurden eingeführt, um inkompatible Änderungen zu trennen und werden in den Metadaten des Cargo-Pakets über das Feld „Edition“ im Abschnitt „[Paket]“ konfiguriert. Beispielsweise enthält die Ausgabe 2018 Funktionen, die Ende 2018 stabilisiert wurden, und deckt auch alle weiteren Änderungen ab, die die Kompatibilität nicht beeinträchtigen. Die Ausgabe 2021 enthält zusätzlich inkompatible Funktionen, die in der aktuellen Version 1.56 vorgeschlagen und für die zukünftige Implementierung genehmigt wurden. Neben der Sprache selbst berücksichtigen die Redakteure auch den Stand der Tools und der Dokumentation.
Die wichtigsten in Rust 2021 behobenen Inkompatibilitäten sind:
- Separate Erfassung in Closures – Closures können jetzt einzelne Feldnamen anstelle des gesamten Bezeichners erfassen. Beispielsweise erfasst „|| ax + 1“ nur „ax“ und nicht „a“.
- Das IntoIterator-Merkmal für Arrays: array.into_iter() ermöglicht es Ihnen, über Array-Elemente nach Werten statt nach Referenzen zu iterieren.
- In Makroregeln ist die Behandlung von Ausdrücken "|" wurde in Mustern geändert (logische ODER-Verknüpfung) - der Spezifizierer ":pat" in Übereinstimmungen berücksichtigt jetzt das "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 Sprachsyntax 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 „[package]“ ein Rust-Version-Feld hinzugefügt, über das Sie die mindestens unterstützte Version von Rust für ein Crate-Paket bestimmen können. Wenn die aktuelle Version nicht mit dem angegebenen Parameter übereinstimmt, funktioniert Cargo nicht mehr und gibt einen Fehler aus.
- 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.
- Die zweite Supportebene wurde für die Plattform aarch64-apple-ios-sim und die dritte Ebene für die Plattformen powerpc-unknown-freebsd und riscv32imc-esp-espidf implementiert. Die dritte Ebene beinhaltet grundlegenden Support, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Fähigkeit zum Erstellen von Code.
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
