Die Veröffentlichung der Programmiersprache Rust 1.90, die ursprünglich von Mozilla entwickelt wurde und jetzt unter der Schirmherrschaft der unabhängigen, gemeinnützigen Organisation Rust Foundation weitergeführt wird, wurde bekannt gegeben. Die Sprache konzentriert sich auf sicheres Speichermanagement und bietet Möglichkeiten zur Erreichung einer hohen Parallelität bei der Ausführung von Aufgaben, ohne auf einen Garbage Collector und eine Laufzeitumgebung angewiesen zu sein (die Laufzeit beschränkt sich auf die grundlegende Initialisierung und Pflege der Standardbibliothek).
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:
- Unter Linux werden auf Computern mit x86_64-Architektur standardmäßig der Linker LLD aus dem LLVM-Projekt für die dynamische Verknüpfung von crate-Paketen verwendet. Der Einsatz von LLD im Vergleich zum Linker BFD hat zu einer Leistungssteigerung beim Verknüpfen großer ausführbarer Dateien und Projekte mit umfangreichen Debugging-Informationen sowie einer Beschleunigung der inkrementellen Neukompilation geführt. In den meisten Fällen ist LLD rückwärtskompatibel mit BFD. Im Falle von Problemen kann man zu BFD zurückkehren, indem man das Flag "-C linker-features=-lld" in der Umgebungsvariable RUSTFLAGS angibt oder in die Konfigurationsdatei .cargo/config.toml einfügt: [target.x86_64-unknown-linux-gnu] rustflags = ["-C linker-features=-lld"]
- Im Paketmanager cargo wurde im Befehl "publish" die Option "—workspace" implementiert, die es ermöglicht, automatisch alle Pakete aus dem ausgewählten Arbeitsbereich (eine Sammlung von Paketen, die eine gemeinsame Cargo.lock-Datei und ein gemeinsames Verzeichnis für die Build-Ergebnisse verwendet) zu veröffentlichen, wobei die Reihenfolge der Pakete und die Abhängigkeiten zwischen ihnen berücksichtigt werden.
- Eine neue Charge von APIs wurde in den stabilen Bereich überführt, darunter wurden Methoden und Implementierungen von Traits stabilisiert:
- 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 für CStr
- impl PartialEq für CStr
- impl PartialEq<Cow> für CStr
- impl PartialEq für CString
- impl PartialEq für CString
- impl PartialEq<Cow> für CString
- impl PartialEq für Cow
- impl PartialEq für Cow
- impl PartialEq für Cow
- Das Merkmal «const» wird in Funktionen angewendet:
- ::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 auf der dritten Unterstützungsebene liegen, ist standardmäßig die dynamische Verknüpfung 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 Unterstützungsstufe auf die zweite abgestuft (Apple plant, die Unterstützung der x86_64-Architektur einzustellen). Die erste Unterstützungsstufe umfasst die Erstellung von Binärpaketen, umfangreiche Tests und die Gewährung der höchsten Unterstützungsgarantie für die Plattform – jede Änderung im Compiler wird durch das Ausführen des vollständigen Testsets überprüft. Die zweite Unterstützungsstufe bietet eine Garantie für die Erstellung, jedoch keine Garantie für das Bestehen des Testsets.
Zusätzlich kann die Entwicklung von Windows-Treibern mit der Programmiersprache Rust durch Microsoft erwähnt werden. Auf GitHub wurde bereits eine Sammlung von crate-Paketen für die Erstellung von Treibern basierend auf WDM (Windows Driver Kit), KMDF (Kernel-Mode Driver Framework) und UMDF (User-Mode Driver Framework) sowie Win32-Diensten veröffentlicht, die für die Nutzung in Windows 11 geeignet sind. Ziel des Projekts ist es, Entwicklern in Rust Bibliotheken und Funktionen anzubieten, die den im WDK für C-Entwickler von Treibern bereitgestellten ähneln. In der aktuellen Phase verwendet das Entwicklungstool für Rust-Treiber eine große Anzahl von unsafe-Aufrufen beim Umgang mit den Windows-Subsystemen, doch in Zukunft ist geplant, sichere Abstraktionen für Kernelstrukturen und DDI (Device Driver Interface) vorzubereiten. Die Ergebnisse des Projekts werden unter den Lizenzen MIT und Apache 2.0 veröffentlicht.
Quelle: opennet.ru
