Die Veröffentlichung der allgemein verwendbaren Programmiersprache Rust 1.62, die ursprünglich von Mozilla entwickelt wurde und nun unter der Schirmherrschaft der unabhängigen gemeinnützigen Organisation Rust Foundation weiterentwickelt wird. Die Sprache konzentriert sich auf sichere Speicherverwaltung und bietet Mittel für hohen Parallelismus bei der Ausführung, ohne dabei einen Garbage Collector oder Runtime zu verwenden (die Runtime beschränkt sich auf die grundlegende Initialisierung und Verwaltung der Standardbibliothek).
Die Speicherverwaltungsmethoden in Rust befreien Entwickler von Fehlern beim Umgang mit Zeigern und schützen vor Problemen, die durch die Programmierung auf niedriger Ebene entstehen, wie z.B. den Zugriff auf freigegebenen Speicher, Dereferenzierung von Nullzeigern, Pufferüberläufe usw. Zur Verteilung von Bibliotheken, zur Gewährleistung des Builds und zum Management von Abhängigkeiten wird der Paketmanager Cargo entwickelt. Für die Bereitstellung von Bibliotheken wird das Repository crates.io unterstützt.
Die sichere Handhabung von Speicher in Rust wird während der Kompilierung durch die Überprüfung von Referenzen, das Verfolgen des Besitztums von Objekten, das Management der Lebensdauer von Objekten (Sichtbarkeitsbereiche) und die Bewertung der Korrektheit des Zugriffs auf den Speicher zur Laufzeit sichergestellt. Rust bietet außerdem Mechanismen zum Schutz vor ganzzahligen Überläufen, erfordert die verpflichtende Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek effektiver, implementiert das Konzept der Unveränderlichkeit (immutable) von Referenzen und Variablen standardmäßig und bietet eine starke statische Typisierung zur Minimierung logischer Fehler.
Hauptneuheiten:
- Im Paketmanager „cargo“ wurde der Befehl „add“ eingeführt, der es ermöglicht, neue Abhängigkeiten über die Kommandozeile in die Cargo.toml-Manifeste hinzuzufügen oder bestehende Abhängigkeiten zu ändern. Der Befehl erlaubt auch die Angabe einzelner Eigenschaften (feature) und Versionen, zum Beispiel: cargo add serde —features derive cargo add nom@5
- Die Verwendung von „#[derive(Default)]“ wurde für Enumerationen (enum) hinzugefügt, bei denen mithilfe des Attributs „#[default]“ ein Standardwert festgelegt wird. #[derive(Default)] enum Maybe { #[default] Nothing, Something(T), }
- Auf der Linux-Plattform wird eine kompaktere und schnellere Implementierung des Mutex-Synchronisationsmechanismus verwendet, die auf den von Linux bereitgestellten Futexen basiert. Im Gegensatz zur vorherigen Implementierung, die auf der pthreads-Bibliothek basierte, benötigt die neue Variante zur Speicherung des Mutex-Zustands nur 5 Byte anstelle von 40. Ähnlich wurden die Mechanismen für Condvar- und RwLock-Sperren auf Futex umgestellt.
- Eine zweite Unterstützungsebene für die Zielplattform x86_64-unknown-none wurde implementiert, die für die Erstellung von ausführbaren Dateien gedacht ist, die ohne Betriebssystem funktionieren können. Diese Zielplattform kann beispielsweise beim Schreiben von Kernelkomponenten verwendet werden. Die zweite Unterstützungsebene garantiert den Build.
- Eine dritte Unterstützungsebene für die Plattformen aarch64-pc-windows-gnullvm und x86_64-pc-windows-gnullvm wurde realisiert. Die dritte Ebene bietet grundlegende Unterstützung, jedoch ohne automatisierte Tests, offizielle Build-Veröffentlichungen und Überprüfung der Build-Möglichkeiten für den Code.
- Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
- bool::then_some
- f32::total_cmp
- f64::total_cmp
- Stdin::lines
- windows::CommandExt::raw_arg
- impl<T: Default> Standardwert für AssertUnwindSafe<T>
- From<Rc<str>> für Rc
- From<Arc<str>> für Arc<[u8]>
- FusedIterator für EncodeWide
Quelle: opennet.ru
