Die Veröffentlichung der universellen Programmiersprache Rust 1.65, 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. Die Sprache konzentriert sich auf die Speichersicherheit und bietet die Möglichkeit, eine hohe Jobparallelität zu erreichen und gleichzeitig die Verwendung eines Garbage Collectors und einer Laufzeit zu vermeiden (die Laufzeit beschränkt sich auf die grundlegende Initialisierung und Wartung der Standardbibliothek).
Die Speicherverarbeitungsmethoden von Rust bewahren den Entwickler vor Fehlern bei der Manipulation von Zeigern und schützen vor Problemen, die durch die Speicherverarbeitung 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.
Die Speichersicherheit wird in Rust zur Kompilierungszeit durch Referenzprüfung, Verfolgung des Objektbesitzes, Verfolgung der Objektlebensdauer (Umfänge) und Beurteilung der Korrektheit des Speicherzugriffs während der Codeausführung gewährleistet. Rust bietet außerdem Schutz vor Ganzzahlüberläufen, erfordert eine obligatorische Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek besser, wendet standardmäßig das Konzept unveränderlicher Referenzen und Variablen an und bietet starke statische Typisierung, um logische Fehler zu minimieren.
Wichtigste Neuerungen:
- Unterstützung für Generic Associated Types (GAT) hinzugefügt, mit denen Sie Typaliase erstellen können, die mit einem anderen Typ verknüpft sind, und die es Ihnen ermöglichen, Typkonstruktoren mit Merkmalen zu verknüpfen. Merkmal Foo { Typ Bar<'x>; }
- Der Ausdruck „let ... else“ wurde implementiert, sodass Sie die Musterübereinstimmungsbedingung direkt im Ausdruck „let“ überprüfen und beliebigen Code ausführen können, wenn das Muster nicht übereinstimmt. let Ok(count) = u64::from_str(count_str) else { panic!("Can't parse integer: '{count_str}'"); };
- Die Break-Anweisung darf benannte Blöcke vorzeitig verlassen, wobei der Blockname (das Label) verwendet wird, um zu bestimmen, welcher Block verlassen werden soll. let result = 'block: { do_thing(); if condition_not_met() { break 'block 1; } do_next_thing(); if condition_not_met() { break 'block 2; } do_last_thing(); 3 };
- Für Linux wurde die Möglichkeit hinzugefügt, Debugging-Informationen (split-debuginfo) separat zu speichern, die bisher nur für die macOS-Plattform verfügbar war. Bei Angabe der Option „-Csplit-debuginfo=unpacked“ werden Debuginfo-Daten im DWARF-Format in mehreren separaten Objektdateien mit der Erweiterung „.dwo“ gespeichert. Durch die Angabe von „-Csplit-debuginfo=packed“ wird ein einzelnes Paket im „.dwp“-Format erstellt, das alle Debuginfo-Daten für das Projekt enthält. Um debuginfo direkt in den .debug_*-Abschnitt von ELF-Objekten zu integrieren, können Sie die Option „-Csplit-debuginfo=off“ verwenden.
- Ein neuer Teil der API wurde in die Kategorie „stabil“ verschoben, einschließlich der Stabilisierung der Methoden und Implementierungen von Merkmalen:
- std::backtrace::Backtrace
- Gebunden::as_ref
- std::io::read_to_string
- <*const T>::cast_mut
- <*mut T>::cast_const
- Das Attribut „const“, das die Möglichkeit seiner Verwendung in jedem Kontext anstelle von Konstanten bestimmt, wird in den Funktionen <*const T&>::offset_from und <*mut T>::offset_from verwendet
- Als Teil der letzten Phase des Übergangs der LSP-Implementierung (Language Server Protocol) zu Rust-Analyzer wurde die veraltete Rust Language Server-Implementierung (RLS) durch einen Stub-Server ersetzt, der eine Warnung mit dem Vorschlag ausgibt, zu Rust-Analyzer zu wechseln.
- Während der Kompilierung wird die Unterstützung für die Inline-Bereitstellung von MIR-Zwischencode aktiviert, was zu einer Beschleunigung der Kompilierung typischer Crate-Pakete um 3–10 % führt.
- Um geplante Builds zu beschleunigen, ermöglicht der Cargo-Batch-Manager die Sortierung von Jobs, die in der Warteschlange auf ihre Fertigstellung warten.
Bemerkenswert ist außerdem ein Interview über den Einsatz der Programmiersprache Rust bei Volvo zur Entwicklung von Komponenten für Fahrzeuginformationssysteme. Es ist nicht geplant, bestehenden und getesteten Code in Rust umzuschreiben, doch für neuen Code ist Rust eine der bevorzugten Optionen, um die Qualität zu verbessern und gleichzeitig die Kosten zu senken. Auch in den Automobilverbänden AUTOSAR (AUTomotive Open System ARchitecture) und SAE (Society of Automotive Engineers) wurden Arbeitsgruppen zur Verwendung der Programmiersprache Rust gegründet.
Darüber hinaus sprach David Kleidermacher, Vice President of Engineering bei Google, über die Migration des Codes zur Schlüsselverwaltung der Android-Plattform zu Rust sowie über die Verwendung von Rust in der Implementierung des DNS-over-HTTPS-Protokolls, im Ultrabreitband-Chip-Stack (UWB) und im Android Virtualization Framework für den Tensor-G2-Chip. Neue Bluetooth- und WLAN-Stacks, die in Rust neu geschrieben wurden, werden ebenfalls für Android entwickelt. Die Gesamtstrategie besteht darin, die Sicherheit schrittweise zu erhöhen, indem zunächst die anfälligsten und wichtigsten Softwarekomponenten zu Rust migriert werden und anschließend weitere zugehörige Subsysteme abgedeckt werden. Rust wurde im vergangenen Jahr in die Liste der für die Android-Plattformentwicklung zugelassenen Sprachen aufgenommen.
Source: opennet.ru
