Veröffentlichung von Rust 1.90. Werkzeugkasten zur Erstellung von Windows-Treibern in Rust.

Die Veröffentlichung der Programmiersprache Rust 1.90, originally from Mozilla und nun von der unabhängigen Non-Profit-Organisation Rust Foundation weiterentwickelt, ist erfolgt. Die Sprache konzentriert sich auf die sichere Arbeit mit Speicher und bietet Mittel zur Erreichung hohen Parallelismus bei der Aufgabenausführung, ohne einen Garbage Collector oder Runtime zu verwenden (die Runtime 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:

  • Unter Linux auf Computern mit der Architektur x86_64 wird standardmäßig der Linker LLD aus dem LLVM-Projekt für die dynamische Verknüpfung von Crate-Paketen verwendet. Die Verwendung von LLD im Vergleich zum Linker BFD hat die Performance bei der Verknüpfung großer ausführbarer Dateien und Projekte mit umfangreichen Debug-Informationen verbessert sowie die inkrementelle Neubaugeschwindigkeit erhöht. In den meisten Fällen ist LLD rückwärtskompatibel mit BFD. Bei Problemen kann BFD wiederhergestellt werden, indem in der Umgebungsvariable RUSTFLAGS das Flag „-C linker-features=-lld“ angegeben oder in die Konfigurationsdatei .cargo/config.toml Folgendes hinzugefügt wird: [target.x86_64-unknown-linux-gnu] rustflags = ["-Clinker-features=-lld"]
  • Im Paketmanager cargo bietet der Befehl „publish“ die Option „—workspace“, mit der alle Pakete aus dem ausgewählten Arbeitsbereich automatisch veröffentlicht werden können (eine Sammlung von Paketen, die eine gemeinsame Cargo.lock-Datei und einen gemeinsamen Build-Ausgabeordner verwenden), wobei die Reihenfolge der Pakete sowie die Abhängigkeiten zwischen ihnen berücksichtigt werden.
  • Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
    • u{n}::checked_sub_signed
    • u{n}::overflowing_sub_signed
    • u{n}::saturating_sub_signed
    • u{n}::wrapping_sub_signed
    • impl Copy für IntErrorKind
    • impl Hash für IntErrorKind
    • impl PartialEq<&CStr> für CStr
    • impl PartialEq<CString> für CStr
    • impl PartialEq<Cow<CStr>> für CStr
    • impl PartialEq<&CStr> für CString
    • impl PartialEq<CStr> für CString
    • impl PartialEq<Cow<CStr>> für CString
    • impl PartialEq<&CStr> für Cow
    • impl PartialEq<CStr> für Cow
    • impl PartialEq<CString> für Cow
  • Das Kennzeichen „const“ wird in Funktionen angewendet:
    • <[T]>::reverse
    • f32::floor
    • f32::ceil
    • f32::trunc
    • f32::fract
    • f32::round
    • f32::round_ties_even
    • f64::floor
    • f64::ceil
    • f64::trunc
    • f64::fract
    • f64::round
    • f64::round_ties_even
  • Für Zielplattformen, die auf der Musl-Bibliothek basieren und sich auf der dritten Unterstützungsebene befinden, ist standardmäßig dynamisches Linking aktiviert: mips64-unknown-linux-muslabi64, powerpc64-unknown-linux-musl, powerpc-unknown-linux-musl, powerpc-unknown-linux-muslspe, riscv32gc-unknown-linux-musl, s390x-unknown-linux-musl und thumbv7neon-unknown-linux-musleabihf.
  • Die Zielplattform „x86_64-apple-darwin“ wurde von der ersten auf die zweite Unterstützungsstufe übertragen (Apple plant, die Unterstützung für die Architektur x86_64 einzustellen). Die erste Unterstützungsstufe umfasst die Erstellung von Binärbauten, umfangreiche Tests und die höchste Supportgarantie für die Plattform – jede Änderung am Compiler wird durch das vollständige Durchlaufen des Testsets überprüft. Die zweite Unterstützungsstufe umfasst eine Garantie für den Build, jedoch keine Garantien bezüglich der Testergebnisse.

Zusätzlich ist die Entwicklung von Microsoft hinsichtlich der Werkzeuge zur Erstellung von Windows-Treibern in Rust erwähnenswert. Auf GitHub ist bereits ein Set von Crate-Paketen veröffentlicht, die für die Erstellung von Treibern auf Basis von WDM (Windows Driver Kit), KMDF (Kernel-Mode Driver Framework) und UMDF (User-Mode Driver Framework) sowie für Win32-Dienste geeignet sind, die mit Windows 11 kompatibel sind. Das Ziel des Projekts ist es, Rust-Entwicklern Bibliotheken und Funktionen anzubieten, die denen im WDK-Werkzeugset für C-Treiberentwickler ähnlich sind. In der aktuellen Phase verwendet das Rust-Treiberentwicklungswerkzeug eine Vielzahl von unsafe-Aufrufen zur Interaktion mit Windows-Subsystemen, aber es ist geplant, in Zukunft sichere Abstraktionen für Kernelstrukturen und DDI (Device Driver Interface) bereitzustellen. Die Ergebnisse des Projekts werden unter den Lizenzen MIT und Apache 2.0 veröffentlicht.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster