Die Version 1.92 der Programmiersprache Rust wurde veröffentlicht. Rust wurde ursprünglich von Mozilla entwickelt und wird nun unter der Schirmherrschaft der unabhängigen Non-Profit-Organisation Rust Foundation weiterentwickelt. Die Sprache fokussiert sich auf sichere Speicheroperationen und bietet Mittel zur Erreichung hoher Parallelität bei der Ausführung von Aufgaben, ohne auf einen Garbage Collector oder eine Runtime (Runtime reduziert sich auf die grundlegende Initialisierung und Wartung der Standardbibliothek) angewiesen zu sein.
Die Methoden zur Speicherverwaltung in Rust befreien den Entwickler von Fehlern beim Umgang mit Zeigern und schützen vor Problemen, die durch niedrige Speicherverwaltung entstehen, wie z. B. den Zugriff auf Speicherbereiche nach deren Freigabe, Dereferenzierung von Nullzeigern, Pufferüberläufen usw. Zur Verbreitung von Bibliotheken, zur Gewährleistung des Builds und zur Verwaltung von Abhängigkeiten wird der Paketmanager Cargo entwickelt. Für das Hosting von Bibliotheken wird das Repository crates.io unterstützt.
Sichere Speicherverwaltung wird in Rust während der Kompilierung durch Überprüfung von Referenzen, Nachverfolgung des Eigentums an Objekten, Berücksichtigung der Lebensdauer von Objekten (Sichtbarkeitsbereiche) und Bewertung der Korrektheit des Zugriffs auf den Speicher während der Ausführung des Codes gewährleistet. Rust bietet ebenfalls Mittel zum Schutz vor Überläufen bei Ganzzahlen, fordert die zwingende Initialisierung von Variablenwerten vor deren Verwendung und behandelt Fehler in der Standardbibliothek besser. Außerdem wird das Konzept der Unveränderlichkeit (immutable) von Referenzen und Variablen standardmäßig angewendet, und es bietet eine starke statische Typisierung zur Minimierung logischer Fehler.
Hauptneuheiten:
- Die Stabilisierung des Typs „never“, abgekürzt mit dem Symbol „!“, wurde fortgesetzt. Dieser Typ definiert Berechnungen, die niemals Werte zurückgeben (beispielsweise gibt die Funktion „exits“, das Makro „panic!“, und unendliche Schleifen niemals die Kontrolle zurück). In der neuen Version wurden die Lint-Überprüfungen „never_type_fallback_flowing_into_unsafe“ und „dependency_on_unit_never_type_fallback“ standardmäßig von Warnungsausgaben auf Kompilierungsfehler umgeschaltet. Diese Überprüfungen werden aktiviert, wenn Probleme im Code auftreten, die beim Gebrauch des Typs „never“ offensichtlich werden.
Vorläufigen Schätzungen zufolge gibt es solche Probleme in etwa 500 Crate-Paketen. Die Aktivierung der Lint-Überprüfungen ermöglicht eine Vorbereitung auf die Stabilisierung des Typs „never“, der derzeit als experimentelles Feature angesehen wird. Die Lint-Überprüfungen werden nur bei der direkten Erstellung von Paketen aktiv und treten nicht bei der Erstellung von Abhängigkeiten auf. Die Überprüfungen können auch über das Attribut „#[allow]“ deaktiviert werden.
- Das Verhalten der Lint-Überprüfung „unused_must_use“ wurde geändert. Diese wird aktiviert, wenn das von einer Funktion zurückgegebene Wert ignoriert wird, sofern die Funktion oder der zurückgegebene Typ mit dem Attribut „#[must_use]“ gekennzeichnet ist. In der neuen Version wurde die Ausgabe von Warnungen über ignorierte Rückgabewerte für Typen Result und ControlFlow eingestellt, bei denen der Fehlerstatus durch einen Typ ohne Werte („!“ oder „Infallible“) definiert ist. Zum Beispiel: „fn can_never_fail() -> Result {…}“.
- Das Verhalten des Flags „-Cpanic=abort“ wurde geändert. Bei Angabe dieses Flags wird standardmäßig die Generierung von Unwind-Tabellen zur Durchführung von Backtracing (Rückverfolgung) aktiviert. Um das alte Verhalten wiederherzustellen, steht die Option „-Cforce-unwind-tables=no“ zur Verfügung.
- Die Überprüfung der Argumente des Attributs „#[macro_export]“ wurde verschärft. Bei Angabe ungültiger Attribute wird jetzt ein Fehler und kein Warnhinweis ausgegeben. Probleme mit „#[macro_export]“ werden nicht nur bei der direkten Erstellung des Crate-Pakets, sondern auch bei der Erstellung von Abhängigkeiten überprüft.
- In der Safe-Code ist es erlaubt, rohe Zeiger („&raw [mut | const]“) auf Felder in Unionstypen zu erhalten.
- Für die Zielplattform mips64el-unknown-linux-muslabi64 wurde die Unterstützung für dynamisches Linken implementiert.
- Die minimal unterstützte Version des externen LLVM-Tools wurde auf die Version LLVM 20 angehoben.
- Eine neue Charge von APIs wurde in den stabilen Bereich überführt, darunter wurden Methoden und Implementierungen von Traits stabilisiert:
- NonZero::div_ceil
- Location::file_as_c_str
- RwLockWriteGuard::downgrade
- Box::new_zeroed
- Box::new_zeroed_slice
- Rc::new_zeroed
- Rc::new_zeroed_slice
- Arc::new_zeroed
- Arc::new_zeroed_slice
- btree_map::Entry::insert_entry
- btree_map::VacantEntry::insert_entry
- impl Extend für proc_macro::TokenStream
- impl Extend für proc_macro::TokenStream
- impl Extend für proc_macro::TokenStream
- impl Extend für proc_macro::TokenStream
- Das Merkmal «const» wird in Funktionen angewendet:
- ::rotate_left
- ::rotate_right
- Im Paketmanager Cargo wurde die Wiederholung der Operation "git fetch" im Falle eines Fehlers beim ersten Anfrageauftrag sichergestellt. Komponenten zur Integration mit dem Terminalemulator Ghostty wurden hinzugefügt. Ein neues Kapitel über die Optimierung des Buildprozesses wurde ins Handbuch aufgenommen.
Zusätzlich können die kürzlich angekündigten Projekte und Veranstaltungen in Verbindung mit Rust hervorgehoben werden:
- Das Unternehmen Ferrocene hat die Zertifizierung IEC 61508 (SIL 2) für die Bibliothek libcore abgeschlossen, die eine Teilmenge von Aufrufen aus der Standard-Basiskbibliothek von Rust umfasst. Die Zertifizierung bestätigt die Konformität der Bibliothek mit den Anforderungen für sicherheitskritische industrielle Systeme. Ferrocene ist bekannt für die Erstellung von Werkzeugen zur Entwicklung von sicherheitskritischen Systemen (Safety-Critical Systems) in Rust sowie für die Pflege der FLS-Spezifikation (Ferrocene Language Specification), auf deren Grundlage die Referenzspezifikation für die Sprache Rust entwickelt wird.
- Die Version 0.14 der Iced-Bibliothek für die Erstellung von grafischen Benutzeroberflächen unter Verwendung des reaktiven Programmiermodells wurde veröffentlicht. In Iced wird eine Architektur implementiert, die für Entwickler, die mit der deklarativen Schnittstellengestaltung in Elm vertraut sind, bekannt ist. Ein komplettes Set von Widgets wird angeboten, das die Erstellung asynchroner Handler und die Anwendung eines adaptiven Layouts der Benutzeroberflächenelemente je nach Fenster- und Bildschirmgröße ermöglicht. Mehrere Rendering-Engines werden bereitgestellt, die Vulkan, Metal und DX12 unterstützen. Zu den größeren Projekten, die Iced verwenden, zählt die Desktop-Umgebung COSMIC.
In der neuen Version wurden die Widgets „table“, „grid“, „sensor“, „float“ und „pin“ hinzugefügt sowie die Möglichkeiten des Widgets zur Verarbeitung von Markdown-Markup erweitert. Implementiert wurden: ein reaktiver Rendering-Modus; scrollbarere Bereiche, die bei Bedarf erscheinen; eine API für die Arbeit mit Animationen; Unterstützung von Eingabemethoden; ein headless-Modus; die Möglichkeit, Änderungen ohne Unterbrechung der Anwendung vorzunehmen (Hot Reloading); Parallelisierung der Bilddecodierung; Werkzeuge zur Debugging und zur Leistungsprofilierung.
- Das Projekt Ribir entwickelt eine Bibliothek zur Erstellung plattformunabhängiger Anwendungen mit grafischer Benutzeroberfläche, die es ermöglicht, eine gemeinsame Codebasis für die Erstellung grafischer Anwendungen für verschiedene Plattformen (Linux, Windows, macOS, in Planung Android und iOS) zu nutzen. Verfügbar sind eine deklarative Sprache zur Erstellung von Benutzeroberflächen auf der Basis von Rust-Makros, mehr als 20 Widgets, Gestaltungsthemen, Rendering auf Basis von wgpu.
- Eine Utility namens Island wurde vorgestellt, die für die isolierte Ausführung von Anwendungen bestimmt ist. Der Mechanismus Landlock wird für die Sandbox-Isolierung verwendet. Island ermöglicht es, Regeln im TOML-Format zu erstellen und diese zur Isolierung bestehender ausführbarer Dateien mit Hilfe von Landlock anzuwenden, ohne dass eine Änderung im Code erforderlich ist. Im Gegensatz zu Firejail benötigt die Utility Island keine Root-Rechte oder speziellen Berechtigungen.
- Das Unternehmen Google hat das in Rust geschriebene Werkzeug Wasefire vorgestellt, welches für die Entwicklung sicherer Firmware gedacht ist. Die Hauptidee besteht darin, separate isolierte Handler (Applets) auf einer Basisumgebung der Firmware (Plattform) auszuführen. Die Firmware-Entwicklung ist nicht an Programmiersprachen gebunden — Firmware-Komponenten können im WebAssembly-Format mit Erweiterungen für WASI (WebAssembly System Interface) bereitgestellt und mit Wasmtime ausgeführt werden.
- Die Veröffentlichung der UEFI-Firmware Patina 18, die in Rust geschrieben wurde, wurde bekannt gegeben. Patina bietet einen Ersatz für die grundlegenden Komponenten der UEFI-Firmware und kann verwendet werden, um bestehende Firmware, die in C geschrieben ist, schrittweise auf die Verwendung der Sprache Rust umzustellen.
- Das Projekt Brimstone entwickelt eine neue JavaScript-Engine, die von Grund auf in Rust geschrieben wurde. In der aktuellen Version werden bereits mehr als 97% der Funktionen von ECMAScript 2026 unterstützt. Eine virtuelle Maschine zur Ausführung von Bytecode wurde mit Blick auf die Architektur der V8-Engine erstellt.
- Das Catten-Projekt entwickelt einen Kernel für das experimentelle Betriebssystem CharlotteOS, geschrieben in Rust. Der Kernel unterstützt eine zugriffsbasierte Verwaltung durch 'Capabilities' (analog zu Fuchsia) und verwendet eine verteilte Ressourcenhierarchie ähnlich wie Plan 9 mit URI-Dateipfaden.
- Es wurde die Version 4.2.0 der interaktiven Kommandozeile Fish (friendly interactive shell) veröffentlicht. Der 4.x-Zweig zeichnet sich durch die vollständige Übersetzung des Codes von C++ nach Rust aus.
- Das Unternehmen Cloudflare hat den Code der Rust-Bibliothek tokio-quiche veröffentlicht, um die Unterstützung für die QUIC- und HTTP/3-Protokolle in asynchronen Anwendungen basierend auf dem Tokio-Framework zu integrieren.
- Das Tor-Projekt hat die Versionen Arti 1.7 und 1.8 veröffentlicht, Realisierungen des Tor-Toolkits, geschrieben in Rust. Wenn der Code von Arti das Niveau erreicht, das in der Lage ist, die C-Version vollständig zu ersetzen, beabsichtigen die Tor-Entwickler, Arti als die Hauptversion von Tor zu etablieren und schrittweise die Unterstützung der C-Implementierung einzustellen.
In der neuen Version wurde die Implementierung einer eingeschränkten Definition von Onion-Diensten mit Client-Authentifizierung ('restricted-discovery') stabilisiert. Zusätzlich zum SOCKS-Proxy wurde Unterstützung für einen HTTP-Proxy hinzugefügt, der das CONNECT-Verfahren verwendet. Adaptive Zeitlimits wurden implementiert, die sich je nach Last anpassen. Experimentelle Unterstützung für tokio-console wurde hinzugefügt. Die Entwicklung der Funktionen für Relays und Server Verzeichnisse (Directory Authority) wurde fortgesetzt. Der Befehl 'arti hsc ctor-migrate' wurde hinzugefügt, um Schlüssel vom C-Client in den Schlüssel-Speicher von Arti zu übertragen. Es wurden Einstellungen zur Steuerung des Starts von Onion-Diensten hinzugefügt.
- Die Datenbank RustDB wurde veröffentlicht, die in Rust unter dem Eindruck von PostgreSQL erstellt wurde. Grundlegende SQL-Operationen (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), Transaktionen, MVCC, WAL (Write-Ahead Log), Indizes und eine Verbindung über das PostgreSQL-kompatible Protokoll werden unterstützt. Bei der Entwicklung von RustDB kam KI zum Einsatz.
Quelle: opennet.ru
