Die Veröffentlichung der Systemprogrammiersprache Rust 1.54, die ursprünglich von Mozilla entwickelt wurde, aber mittlerweile unter der Schirmherrschaft der unabhängigen Non-Profit-Organisation Rust Foundation weiterentwickelt wird. Die Sprache konzentriert sich auf sichere Speicherverwaltung, bietet automatisches Speichermanagement und stellt Mittel zur Verfügung, um hohe Parallelität bei der Ausführung von Aufgaben zu erreichen, ohne dabei einen Garbage Collector und ein umfassendes Runtime-System zu benötigen (Runtime beschränkt sich auf die grundlegende Initialisierung und die Unterstützung der Standardbibliothek).
Das automatische Speichermanagement in Rust befreit Entwickler von Fehlern beim Umgang mit Zeigern und schützt vor Problemen, die aus der niederen Speicherverwaltung entstehen, wie etwa dem Zugreifen auf Speicherbereiche nach deren Freigabe, dem Dereferenzieren von Nullzeigern, Pufferüberläufen usw. Zur Verbreitung von Bibliotheken, zur Gewährleistung des Builds und zur Verwaltung der Abhängigkeiten wird der Paketmanager Cargo entwickelt. Für die Bereitstellung von Bibliotheken wird das Repository crates.io unterstützt.
Hauptneuheiten:
- Die Möglichkeit zur Nutzung von Makroattributen, die an Funktionen erinnern (prozedurale Makros und mit dem Makro „macro_rules!“ erstellte Makros), wurde hinzugefügt. Diese Makros unterscheiden sich von Funktionen durch das „!“ nach dem Namen (macro!(…)) und durch die Ersetzung des Makrotexts anstelle der Generierung eines Funktionsaufrufs. Der Aufruf von Makros innerhalb von Attributen kann nützlich sein, um Inhalte aus anderen Dateien in dokumentarische Kommentare aufzunehmen. Zum Beispiel kann für das Einfügen des Inhalts der Datei README und das Ergebnis der Ausführung eines Skripts Folgendes angegeben werden: #![doc = include_str!("README.md")] #[path = concat!(env!("OUT_DIR"), "/generated.rs")] mod generated;
- Die im Compiler integrierten Funktionen (Intrinsics) für die Plattform wasm32 wurden stabilisiert, sodass SIMD-Anweisungen in WebAssembly verwendet werden können. Die meisten Funktionen, wie z. B. v128_bitselect, sind im „safe“-Modus verfügbar, aber einige Funktionen, die mit Zeigern arbeiten (z. B. v128_load), bleiben „unsafe“.
- Die Standardanwendung der inkrementellen Kompilierung wurde wiederhergestellt, sodass nur die geänderten Teile des Codes neu kompiliert werden. Dies verkürzt die Projekt-Bauzeit erheblich bei erneuten Kompilierungen nach kleinen Anpassungen. Die inkrementelle Kompilierung wurde in Version 1.52.1 deaktiviert, da versteckte Fehler entdeckt wurden, die nach einer zusätzlichen Überprüfung des Ladens von Daten aus dem Festplattencache auftraten.
- Eine neue Runde der API wurde in den stabilen Bereich überführt, darunter stabilisiert:
- BTreeMap::into_keys
- BTreeMap::into_values
- HashMap::into_keys
- HashMap::into_values
- arch::wasm32
- VecDeque::binary_search
- VecDeque::binary_search_by
- VecDeque::binary_search_by_key
- VecDeque::partition_point
Quelle: opennet.ru
