Die neue Version der Programmiersprache Rust 1.76, die ursprünglich von Mozilla entwickelt wurde, aber jetzt unter der Aufsicht der unabhängigen Non-Profit-Organisation Rust Foundation weitergeführt wird, ist veröffentlicht. Die Sprache konzentriert sich auf die sichere Arbeit mit Speicher und bietet Mittel, um hohen Parallelismus bei der Ausführung von Aufgaben zu erreichen, ohne dabei einen Garbage Collector oder ein Runtime-System zu verwenden (das Runtime beschränkt sich auf die grundlegende Initialisierung und die Unterstützung 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:
- Die Dokumentation enthält nun einen separaten Abschnitt, der die Kompatibilität verschiedener Argumenttypen und Rückgabewerte von Funktionen auf ABI-Ebene beschreibt. Im Vergleich zu früheren Versionen ist die ABI-Kompatibilität der Typen „char“ und „u32“ gewährleistet, die identische Größe und Ausrichtung aufweisen.
- Zusätzlich zu dem zuvor verfügbaren Aufruf „any::type_name::()“, der eine stringbasierte Beschreibung für den im Parameter „T“ angegebenen Typ zurückgibt, wurde die Funktion „type_name_of_val(&T)“ hinzugefügt, die es ermöglicht, Typinformationen auf Basis eines beliebigen unbenannten Verweises zu erhalten. fn get_iter() -> impl Iterator { [1, 2, 3].into_iter() } fn main() { let iter = get_iter(); let iter_name = std::any::type_name_of_val(&iter); let sum: i32 = iter.sum(); println!(„Die Summe von `{iter_name}` ist {sum}.“); } Das Ergebnis lautet: Die Summe von `core::array::iter::IntoIter` ist 6.
- Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
- Arc::unwrap_or_clone
- Rc::unwrap_or_clone
- Result::inspect
- Result::inspect_err
- Option::inspect
- type_name_of_val
- std::hash::{DefaultHasher, RandomState}
- ptr::{from_ref, from_mut}
- ptr::addr_eq
- Dritte Ebene support für die Plattformen {x86_64,i686}-win7-windows-msvc, aarch64-apple-watchos, arm64e-apple-ios und arm64e-apple-darwin wurde implementiert. Die dritte Ebene umfasst grundlegenden Support, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Möglichkeit zur Code-Bildung.
Zusätzlich sollte die Demonstration des experimentellen Task-Schedulers scx_rustland erwähnt werden, der in der Programmiersprache Rust geschrieben ist und im Benutzermodus ausgeführt wird (die Logik der Aufgabenplanung wurde mithilfe des Tools sched-ext, das BPF verwendet, aus dem Kernel in den Benutzermodus verlagert). Der Scheduler ist optimiert, um die Priorität interaktiver Aufgaben im Vergleich zu CPU-intensiven Aufgaben zu erhöhen. So ermöglichte der scx_rustland-Scheduler in einem Test mit einem gleichzeitigen Start eines Spielanwendungs und dem Kompilieren des Kernels, eine höhere FPS im Spiel zu erreichen als beim Einsatz des Standard-Schedulers EEVDF.
Quelle: opennet.ru
