Veröffentlichung von Rust 1.92. Rust-Projekte für GUI, Sandbox-Isolation und Firmware-Entwicklung

Der Release der Programmiersprache Rust 1.92, ursprünglich von Mozilla entwickelt und jetzt unter der Schirmherrschaft der unabhängigen, gemeinnützigen Rust Foundation weitergeführt, ist verfügbar. Die Sprache legt den Fokus auf sichere Speicherverwaltung und bietet Mittel für hohe Parallelität bei der Ausführung von Aufgaben, ohne dabei einen Garbage Collector oder ein umfassendes Laufzeitsystem (runtime) zu verwenden – die Laufzeit 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 Stabilisierung des Typs „never“, gekennzeichnet durch das Symbol „!“, wurde fortgesetzt. Dieser Typ definiert Berechnungen, die niemals Werte zurückgeben (Beispiele hierfür sind die Funktion „exits“, das Makro „panic!“, sowie unendliche Schleifen, die niemals die Kontrolle zurückgeben). In der neuen Version wurden die Lint-Checks „never_type_fallback_flowing_into_unsafe“ und „dependency_on_unit_never_type_fallback“ standardmäßig von Warnmeldungen auf die Erzeugung von Compile-Fehlern umgeschaltet. Diese Prüfungen treten auf, wenn es im Code Probleme gibt, die bei der Verwendung des Typs „never“ sichtbar werden.

    Vorläufigen Schätzungen zufolge gibt es ähnliche Probleme in etwa 500 crate-Paketen. Die Aktivierung von Lint-Überprüfungen wird dazu beitragen, sich auf die Stabilisierung des Typs „never“ vorzubereiten, der derzeit als experimentelle Funktion eingestuft ist. Lint-Überprüfungen werden nur bei der direkten Paketkompilierung ausgeführt und treten nicht bei der Kompilierung 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“, die ausgelöst wird, wenn der Rückgabewert einer Funktion ignoriert wird, wurde geändert, sofern die Funktion oder der Rückgabetyp mit dem Attribut „#[must_use]“ markiert ist. In der neuen Version wurde die Ausgabe von Warnungen für ignorierte Rückgabewerte mit den Typen Result und ControlFlow eingestellt, bei denen der Fehlerzustand durch den Typ ohne Werte („!“ oder „Infallible“) definiert wird. Beispiel: „fn can_never_fail() -> Result {…}“.
  • Das Verhalten des Flags „-Cpanic=abort“ wurde geändert; bei Angabe wird standardmäßig die Erzeugung von Unwind-Tabellen für die Rückverfolgung (backtrace) aktiviert. Um das alte Verhalten wiederherzustellen, gibt es die Option „-Cforce-unwind-tables=no“.
  • Die Überprüfung der Argumente für das Attribut „#[macro_export]“ wurde verschärft. Bei Angabe ungültiger Attribute wird nun ein Fehler und nicht mehr eine Warnung 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.
  • Im Safe-Code ist es jetzt erlaubt, Raw-Pointer („&raw [mut | const]“) auf Felder in Union-Typen zu erhalten.
  • Die Unterstützung für dynamisches Binden wurde für die Zielplattform mips64el-unknown-linux-muslabi64 implementiert.
  • Die minimal unterstützte Version des externen LLVM-Toolings wurde auf die Version LLVM 20 angehoben.
  • Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
    • 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 for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
  • Das Kennzeichen „const“ wird in Funktionen angewendet:
    • ::rotate_left
    • ::rotate_right
  • Der Paketmanager Cargo sorgt dafür, dass der Befehl „git fetch“ bei einem Fehler im ersten Versuch wiederholt wird. Es wurden Komponenten zur Integration mit dem Terminalemulator Ghostty hinzugefügt. Ein neues Kapitel zur Optimierung des Build-Prozesses wurde in die Anleitung aufgenommen.

Zusätzlich sind kürzlich angekündigte Projekte und Veranstaltungen im Zusammenhang mit Rust zu erwähnen:

  • Das Unternehmen Ferrocene gab bekannt, dass es die Zertifizierung IEC 61508 (SIL 2) für die Bibliothek libcore, die eine Teilmenge der Aufrufe aus der Standardbibliothek von Rust umfasst, erfolgreich durchlaufen hat. Die Zertifizierung bestätigt, dass die Bibliothek den Anforderungen für sicherheitskritische industrielle Systeme entspricht. Ferrocene ist bekannt für die Entwicklung von Werkzeugen zur Programmierung von Anwendungen in Rust für sicherheitskritische Systeme sowie für die Pflege der FLS (Ferrocene Language Specification), auf deren Grundlage die Referenzspezifikation für die Programmiersprache Rust entwickelt wird.
  • Das Release der Bibliothek Iced 0.14 wurde veröffentlicht, um Benutzerschnittstellen mit einem reaktiven Programmiermodell zu erstellen. Iced bietet eine Architektur, die für Entwickler, die mit der deklarativen Schnittstellensprache Elm vertraut sind, leicht nachvollziehbar ist. Es wird ein vollständiges Set an Widgets angeboten, mit der Möglichkeit, asynchrone Handler zu erstellen und die Anordnung der Schnittstellenelemente je nach Fenster- und Bildschirmgröße adaptiv zu gestalten. Mehrere Rendering-Engines stehen zur Verfügung und unterstützen Vulkan, Metal und DX12. Unter den bedeutenden Projekten, die Iced nutzen, ist die Desktop-Umgebung COSMIC hervorzuheben.

    In der neuen Version wurden die Widgets „table“, „grid“, „sensor“, „float“ und „pin“ hinzugefügt, und die Funktionen des Widgets für Markdown-Layout wurden erweitert. Implementiert wurden: ein reaktives Render-Modus; dynamisch erscheinende Scrollleisten; API für Animationen; Unterstützung von Eingabemethoden; ein headless-Modus; die Möglichkeit von Änderungen ohne Anhalten der Anwendung (Hot Reloading); Parallelisierung der Bilddekodierung; sowie Werkzeuge zur Debugging und Leistungsprofilierung.

  • Das Projekt Ribir entwickelt eine Bibliothek zur Erstellung von plattformübergreifenden 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, mit geplanten Erweiterungen für Android und iOS) zu verwenden. Es stehen eine deklarative Schnittstellensprache auf Basis von Rust-Makros, über 20 Widgets, Gestaltungsthemen und ein Rendering auf Basis von wgpu zur Verfügung.
  • Es wurde das Tool Island vorgestellt, das für die isolierte Ausführung von Anwendungen konzipiert ist. Für die Sandbox-Isolation wird der Mechanismus Landlock verwendet. Island ermöglicht es, Regeln im TOML-Format zu erstellen und diese zur Isolation bestehender ausführbarer Dateien mithilfe von Landlock anzuwenden, ohne Änderungen am Code vorzunehmen. Im Gegensatz zu Firejail benötigt das Tool Island keine Root-Rechte und speziellen Berechtigungen.
  • Google hat ein auf Rust basierendes Werkzeug namens Wasefire vorgestellt, das für die Entwicklung sicherer Firmware gedacht ist. Die Hauptidee besteht darin, separate isolierte Handler (Applet) über der grundlegenden Firmware-Umgebung (Plattform) zu starten. Die Firmware-Entwicklung ist nicht an Programmiersprachen gebunden – die Firmware-Komponenten können in WebAssembly mit WASI (WebAssembly System Interface) geliefert und mithilfe von Wasmtime ausgeführt werden.
  • Die UEFI-Firmware Patina 18, die in Rust geschrieben wurde, ist veröffentlicht worden. Patina bietet einen Ersatz für die grundlegenden UEFI-Firmware-Komponenten und kann verwendet werden, um bestehenden Firmware, die in C geschrieben ist, schrittweise auf die Verwendung von Rust umzustellen.
  • Das Brimstone-Projekt entwickelt eine neue JavaScript-Engine, die von Grund auf in Rust geschrieben wurde. In der aktuellen Version werden bereits über 97 % der Funktionen von ECMAScript 2026 unterstützt. Die virtuelle Maschine zur Ausführung von Bytecode wurde unter Berücksichtigung der Architektur der V8-Engine entwickelt.
  • Das Projekt Catten entwickelt einen Kern für das experimentelle Betriebssystem CharlotteOS, das in Rust geschrieben ist. Der Kern unterstützt ein auf "Capability" basierendes Zugriffsmanagement (ähnlich wie bei Fuchsia) und nutzt eine auf Plan 9 basierende verteilte Ressourcenhierarchie mit URI-basierter Adressierung von Dateipfaden.
  • Die interaktive Kommandozeile Fish 4.2.0 (friendly interactive shell) wurde veröffentlicht. Die 4.x Reihe ist bemerkenswert, da die gesamte Codebasis von C++ nach Rust portiert wurde.
  • Das Unternehmen Cloudflare hat den Code der Rust-Bibliothek tokio-quiche veröffentlicht, die Unterstützung für die Protokolle QUIC und HTTP/3 in asynchronen Anwendungen, die auf dem Tokio-Framework basieren, integriert.
  • Das Tor-Projekt hat die Versionen Arti 1.7 und 1.8 veröffentlicht, welche die Implementierung des Tor-Werkzeugs sind, geschrieben in Rust. Wenn der Arti-Code einen Stand erreicht, der den C-basierten Nachfolger vollständig ersetzen kann, beabsichtigen die Tor-Entwickler, Arti als Hauptimplementierung von Tor zu etablieren und schrittweise die C-Implementierung einzustellen.

    In der neuen Version wurde die Implementierung der eingeschränkten Entdeckung von Onion-Diensten mithilfe der Client-Authentifizierung („restricted-discovery“) stabilisiert. Neben SOCKS-Proxy wurde die Unterstützung für HTTP-Proxy, das die CONNECT-Methode verwendet, hinzugefügt. Adaptive Timeout-Einstellungen in Abhängigkeit von der Last wurden implementiert. Experimentelle Unterstützung für tokio-console wurde hinzugefügt. Die Entwicklung der Funktionalitäten für Relay- und Server 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 migrieren. Einstellungen zur Steuerung des Starts von Onion-Diensten wurden hinzugefügt.

  • Die Datenbank RustDB wurde veröffentlicht, die in der Programmiersprache Rust inspiriert 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 die Verbindung über ein PostgreSQL-kompatibles Protokoll werden unterstützt. Bei der Entwicklung von RustDB kam KI zum Einsatz.

Quelle: opennet.ru

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster