Die Veröffentlichung von Rust 1.94, einer Programmiersprache, die ursprünglich von Mozilla entwickelt und jetzt von der unabhängigen, gemeinnützigen Organisation Rust Foundation betreut wird, wurde bekannt gegeben. Die Sprache konzentriert sich auf sichere Speicheroperationen und bietet Mittel zur Erreichung hohen Parallelismus bei der Ausführung von Aufgaben, und dies ohne die Verwendung eines Garbage Collectors oder eines Runtime (das Runtime beschränkt sich auf die grundlegende Initialisierung und die Wartung der Standardbibliothek).
Die Methoden zur Arbeit mit Speicher in Rust zielen darauf ab, Fehler beim Umgang mit Zeigern zu vermeiden und Probleme zu verhindern, die durch die Low-Level-Arbeit mit Speicher entstehen, wie den Zugriff auf freigegebenen Speicher, Dereferenzierung nuller Zeiger, Pufferüberläufe usw. Zur Verbreitung von Bibliotheken, zur Sicherstellung der Kompilierung und zum Management von Abhängigkeiten wird der Paketmanager Cargo weiterentwickelt. Für die Bereitstellung 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:
- In den Typ slice wurde die Methode array_windows eingefügt, die einen Iterator zur Durchlauf durch Scheiben (slice) in festen Größenfenstern erstellt, die sich schrittweise um ein Element verschieben. Im Gegensatz zur zuvor verfügbaren Methode windows arbeitet die Methode array_windows mit einer konstanten Fenstergröße und gibt bei jeder Iteration einen Verweis auf ein Array fester Größe (&[T; N]) anstelle eines Arrays unbestimmter Größe (&[T]) zurück. Da die Größe des Arrays dem Compiler anfänglich bekannt ist, kann die Überprüfung der Arraygrenzen in jeder Iterationsstufe zur Leistungssteigerung entfallen. let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]); assert!(iter.next().is_none());
- In den Konfigurationsdateien des Paketmanagers Cargo (.cargo/config.toml) wurde die Direktive „include“ implementiert, die es ermöglicht, den Inhalt anderer Dateien an bestimmten Stellen einzufügen. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
- In die Manifest- und Konfigurationsdateien wurde die Unterstützung für die neue Version der Markupsprache TOML 1.1 eingeführt, die Unterstützung für mehrzeilige integrierte Tabellen, Escape-Sequenzen "\xHH" für das Einfügen der hexadezimalen Darstellung von Bytes und "\e" für die Ersetzung von "\u001B", die Möglichkeit, ein Komma am Ende des letzten Elements zu belassen, und die Möglichkeit, die Angabe der Sekunden in Zeitwerten zu überspringen. serde = { version = "1.0", features = ["derive"] } kann nun ersetzt werden durch serde = { version = "1.0", features = ["derive"], }
- Eine neue Charge von APIs wurde in den stabilen Bereich überführt, darunter wurden Methoden und Implementierungen von Traits stabilisiert:
- ::array_windows
- ::element_offset
- LazyCell::get
- LazyCell::get_mut
- LazyCell::force_mut
- LazyLock::get
- LazyLock::get_mut
- LazyLock::force_mut
- impl TryFrom for usize
- std::iter::Peekable::next_if_map
- std::iter::Peekable::next_if_map_mut
- Eingebaute Funktionen für x86-Instruktionen avx512fp16
- Eingebaute Funktionen für AArch64-Instruktionen NEON fp16
- f32::consts::EULER_GAMMA
- f64::consts::EULER_GAMMA
- f32::consts::GOLDEN_RATIO
- f64::consts::GOLDEN_RATIO
- Das Merkmal «const» wird in Funktionen angewendet:
- f32::mul_add
- f64::mul_add
- Die Plattform riscv64im-unknown-none-elf wurde auf die dritte Unterstützungsebene übertragen. Die dritte Ebene umfasst die grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Fähigkeit zur Codekompilierung.
Zusätzlich können die kürzlich angekündigten Projekte und Veranstaltungen in Verbindung mit Rust hervorgehoben werden:
- Ayrton Muñoz, der früher die Unterstützung der Sony PlayStation 1 im Rust-Compiler implementiert und FreeBSD auf Apple Silicon-Rechner portiert hat, hat FreeBSD die Möglichkeit gegeben, Kernelkomponenten und Gerätetreiber in Rust zu erstellen. Zum Testen wurde ein Satz von KPI-Bindungen (Kernel Programming Interface) angeboten, die es ermöglichen, Rust-Code im FreeBSD-Kernel zu verwenden, sowie der mit diesen Bindungen erstellte Soundtreiber virtio (virtio_snd), der HID-Treiber DockChannel für die Tastatur im M2 MacBook und mehrere Low-Level-Treiber für die Mac-Subsysteme auf Apple Silicon-Chips.
Es wird erwähnt, dass die Arbeiten an den Rust-Bindungen seit Ende 2024 laufen. In den Bindungen ist bisher nur ein Teil von C-KPI implementiert, und sie werden als instabil eingestuft, jedoch wird angestrebt, den Stabilitätsgrad im Laufe der Zeit auf ein Niveau zu bringen, das dem entsprechenden Interface für die Programmiersprache C ähnelt. Der als Beispiel vorgeschlagene Treiber virtio_snd eignet sich zur Musikwiedergabe in QEMU. Es wird angenommen, dass die Rust-Bindungen bis 2026 ausreichend stabilisiert sein werden, damit interessierte Entwickler sie zur Codeerstellung nutzen können.
- Benny Siegert, der an der Entwicklung von NetBSD beteiligt ist, versuchte, die Gründe zu erläutern, warum die Unterstützung der Programmiersprache Rust im NetBSD-Kernel nicht eingeführt wird: NetBSD unterstützt Architekturen, für die Rust nicht verfügbar ist; die Pflege der vorhandenen Rust-Toolchain in pkgsrc erfordert erhebliche Anstrengungen und wird nur von wenigen Entwicklern begleitet; die Unterstützung von Rust im Kernel erfordert die Einbindung des Rust-Compilers in das Basissystem; beim Bootstrapping von Rust in NetBSD wird eine vorherige Version des Binärpakets verwendet, was für selbstständige Distributionen, die im Quellcode verbreitet werden, inakzeptabel ist; die Release-Zyklen von Rust sind mit den Entwicklungszyklen von NetBSD und der Unterstützung früherer Versionen (z. B. wird weiterhin die Version NetBSD 9, die 2020 veröffentlicht wurde, unterstützt) nicht kompatibel, in diesen Bedingungen wäre die Bereitstellung und Unterstützung eines sechs Jahre alten Rust-Compilers erforderlich.
- Die Ausgabe der in Anwendungen eingebetteten DBMS Turso 0.5, geschrieben in Rust und kompatibel mit SQLite auf SQL-Dialekt, Datenbankdateiformat und C API, wurde veröffentlicht. Zu den erweiterten Funktionen gehört der CDC-Mechanismus (Change Data Capture) zur Echtzeitüberwachung von Datenbankänderungen, die Verwendung von io_uring für asynchrone Ein-/Ausgabe unter Linux, Unterstützung für Vektor-Searching, das Vorhandensein eines ALTER-Statements zur Änderung des Datenbankschemas, die Möglichkeit der Datenverschlüsselung in der Datenbank und ein inkrementeller Berechnungsmodus mit der Konstruktion „BEGIN CONCURRENT“.
- Projekt zur Bereitstellung der Möglichkeit, die Standardbibliothek Rust in Programmen zu verwenden, die auf der GPU ausgeführt werden.
- Emuko — ein RISC-V-Emulator, geschrieben in Rust, der Linux laden kann, JIT-Kompilierung unterstützt und in der Lage ist, Zustands-Snapshots zu speichern und wiederherzustellen.
- RustConn (flatpak) — eine grafische Benutzeroberfläche zur Verwaltung externer Netzwerkverbindungen zu anderen Hosts, die SSH, RDP, VNC, SPICE, Telnet, Serielle Verbindung, Kubernetes, Zero Trust und SFTP unterstützt. Der Code ist in Rust geschrieben und nutzt GTK4 und Wayland.
- Ein neuer Branch des zlib-rs 0.6-Projekts wurde vorgestellt, der als erste stabile Version gekennzeichnet ist, die vollständig mit der zlib C API kompatibel ist und als transparenten Ersatz für zlib dient. Das Projekt zielt darauf ab, ein sicheres Analogon der Datenkompressionsbibliothek zlib zu erstellen. Die Entwicklung erfolgt mit Blick auf das zlib-ng-Projekt, das eine leistungsstarke Variante von zlib entwickelt.
- Das Projekt vcad wurde vorgestellt, das ein parametrisches System für computergestütztes Design (CAD) entwickelt, das in Rust geschrieben ist und mit AI-Agenten über das MCP-Protokoll integriert werden kann. 3D-Modellierung, Simulation, Arbeiten mit 2D-Skizzen, komponentenbasierte Montage, Import im STEP-Format und Export in den Formaten STL/GLB/STEP/DXF werden unterstützt.
- Ein Sprachrecognitionssystem, geschrieben in Rust und das AI-Modell Mistral Voxtral Mini 4B Realtime und das Machine Learning-Framework Burn verwendend, wurde veröffentlicht. Das Projekt zielt darauf ab, Sprache in Echtzeit zu erkennen, um Transkriptionen während des Streamings zu erstellen.
- Das c2rust Toolkit 0.22 wurde veröffentlicht, das zur Übersetzung von C-Code (C99) in eine unsafe-Darstellung in Rust dient, die in ihrer Struktur dem ursprünglichen C-Code ähnlich ist. Das erhaltene Arbeitsgerüst kann später für eine schrittweise Übertragung auf idiomatisches Rust und zur Beseitigung von unsafe-Blöcken verwendet werden.
Quelle: opennet.ru
