Die Version 1.97 der Programmiersprache Rust wurde veröffentlicht. Ursprünglich von Mozilla entwickelt, wird sie jetzt von der unabhängigen Non-Profit-Organisation Rust Foundation weiterentwickelt. Die Sprache konzentriert sich auf sichere Speicherverwendung und bietet Mittel zur Erreichung hohen Parallelismus bei der Ausführung von Aufgaben, ganz ohne Einsatz eines Garbage Collectors oder einer komplexen Laufzeitumgebung (Laufzeit beschränkt sich auf die grundlegende Initialisierung und den Betrieb der Standardbibliothek).
Die Methoden zur Arbeit mit dem Speicher in Rust zielen darauf ab, Fehler beim Manipulieren von Zeigern zu vermeiden und Probleme zu schützen, die aus der niedrigstufigen Arbeit mit Speicher resultieren können, wie z. B. den Zugriff auf Speicherbereiche nach deren Freigabe, das Dereferenzieren von Nullzeigern, das Überlaufen von Buffern usw. Zur Verbreitung von Bibliotheken und zur Verwaltung von Abhängigkeiten wird der Paketmanager Cargo entwickelt. Der Repository-Service crates.io unterstützt die Bereitstellung von Bibliotheken.
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:
- Standardmäßig ist ein neues Decorierungschema (Mangling) für Funktionsnamen, globale Variablen und Datenstrukturen in den generierten Objekt- und ausführbaren Dateien aktiviert (-Csymbol-mangling-version=v0). Namen werden so dekodiert, um Konflikte beim Linken verschiedener Programme zu vermeiden, indem spezifischer Kontext angehängt wird, wie der Modulpfad und der Name des Crate-Pakets.
Das zuvor verwendete Namensdekorierungschema, das auf dem Itanium ABI basierte, hatte Nachteile wie die Ersetzung von Generikaparametern durch unlesbare Hashes und die Verwendung von Compilerteilen, die das Itanium ABI nicht unterstützten, was den Einsatz Rust-spezifischer Namensdecodierer erforderte. In Rust 1.97 wird standardmäßig ein für Rust speziell entwickeltes Dekorierungsschema verwendet, das diese Mängel nicht aufweist. Das alte Schema soll in einer der nächsten Versionen entfernt werden.
- Der Paketmanager Cargo umfasst jetzt die Möglichkeit, auf Compilerwarnungen während des Builds zu reagieren. Es wurde eine Umgebungsvariable CARGO_BUILD_WARNINGS hinzugefügt, die drei Werte annehmen kann: warn (Standard) - gibt Warnungen auf dem Bildschirm aus; allow - blendet Warnungsausgaben aus; deny - behandelt Warnungen als Fehler, die den Build stoppen.
In früheren Versionen musste man zur Fertigstellung der Kompilierung nach einer Warnung "-Dwarnings" in RUSTFLAGS für den Compiler angeben. Mit der Änderung von RUSTFLAGS betrachtete der Paketmanager cargo die Kompilierung jedoch als neu, berücksichtigte die Daten im Cache nicht und kompiliere das gesamte Projekt von Grund auf neu. Die Verlagerung der Einstellung auf cargo schloss das Zurücksetzen des Caches und die Notwendigkeit einer vollständigen Neukompilierung bei Änderungen im Warnverarbeitungsmodus aus und vereinfachte außerdem die Aktivierung der Warnverarbeitung als Fehler in Continuous Integration-Systemen.
- Beim Erstellen sind standardmäßig die vom Linker ausgegebenen Meldungen aktiviert. Diese Meldungen erscheinen als Warnungen über eine spezielle Lint-Regel „linker_messages“, die nicht zur Standardgruppe „warnings“ gehört. Dabei filtert rustc Meldungen heraus, die typische Fehlalarme oder normales Verhalten darstellen, und belässt nur Warnungen, die auf Probleme hinweisen könnten, wie zum Beispiel Warnungen zu veralteten Optionen und unerwünschten Einstellungen. Zuvor wurden Informationen vom Linker nur bei einem Fehler angezeigt, andernfalls blieben alle Meldungen verborgen. Um das alte Verhalten wiederherzustellen, kann in der Cargo.toml Folgendes hinzugefügt werden: [lints.rust] linker_messages = „allow“
- Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
- Standard für RepeatN
- Kopie für ffi::FromBytesUntilNulError
- Send für std::fs::File für UEFI
- ::isolate_highest_one
- ::isolate_lowest_one
- ::highest_one
- ::lowest_one
- ::bit_width
- NonZero::isolate_highest_one
- NonZero::isolate_lowest_one
- NonZero::highest_one
- NonZero::lowest_one
- NonZero::bit_width
- Das Attribut „const“ wurde in der Methode char::is_control angewendet.
Zusätzlich sind kürzlich angekündigte Projekte und Veranstaltungen im Zusammenhang mit Rust zu erwähnen:
- Das Projekt zinnia entwickelt einen modularen Unix-ähnlichen Kernel, der in der Programmiersprache Rust geschrieben ist und unter der GPLv2-Lizenz vertrieben wird. Der Kernel unterstützt POSIX-Schnittstellen sowie einige Erweiterungen aus BSD und Linux, wie epoll und timerfd. Für die Grafikdarstellung und die Eingabeorganisation stehen die DRM- (Direct Rendering Manager) und evdev-Treiber zur Verfügung. Die implementierten Funktionen reichen aus, um die Desktop-Umgebung Xfce unter einem X-Server und einem Kompositorsystem zu betreiben. сервера Weston auf Basis von Wayland. Sowohl der Start im QEMU-Emulator als auch auf echter Hardware, wie dem ThinkPad E14 G7, werden unterstützt.
- Die Kommunikationsbibliothek iroh 1.0 wurde veröffentlicht, die es ermöglicht, Netzwerkverbindungen zwischen Anwendungen auf verschiedenen Hosts mit Verbindung über kryptografische Schlüssel herzustellen, anstelle von IP-Adressen (Hier wird der Schlüssel angegeben, mit dem eine Verbindung hergestellt werden muss, und iroh findet den dazugehörigen Host und stellt mit dem QUIC-Protokoll eine verschlüsselte Verbindung her). Direktverbindungen über P2P werden, wenn möglich, hergestellt, andernfalls wird auf Relay-Verbindungen zurückgegriffen, die auch zur Erkennung von Hosts über Schlüssel verwendet werden. Es besteht die Möglichkeit, ein eigenes Relay zu starten oder sich mit unterstützten öffentlichen Relays der Gemeinschaft zu verbinden.
Zu den erweiterten Funktionen gehören: Unterstützung für Multipath QUIC zur gleichzeitigen Paketübertragung über mehrere Routen, die Möglichkeit, hinter NAT zu arbeiten, ein statisches Konfigurationsmodul für die Verbindung zu lokalen Geräten ohne Internetzugang, die Möglichkeit der Kompilierung in Zwischenkode (WASM) zur Ausführung im Browser, sowie die Unterstützung der Erstellung eigener Transportlösungen, beispielsweise für Verbindungen über Bluetooth, WiFi Aware oder LoRa. Der Code ist in Rust geschrieben und steht unter den Lizenzen Apache-2.0 und MIT zur Verfügung. Bindings für Python, Node.js, Kotlin und Swift sind verfügbar.
- Der Autor der JavaScript-Serverplattform Bun hat einen Artikel veröffentlicht, der das Projekt zur Neuschreibung von Bun von Zig auf Rust unter Verwendung des KI-Modells Claude Fable behandelt. Es wird darauf hingewiesen, dass Bun 1.3.14 die letzte Version in Zig sein wird und die nächste Version, Bun 1.4.0, bereits in Rust vorliegen wird. Laut durchgeführten Tests verbraucht die Rust-Version deutlich weniger Speicher und ist 2-5 % schneller als die Zig-Version. Die Größe der ausführbaren Datei der Rust-Version wurde um 20 % reduziert.
Quelle: opennet.ru
