Zurück zur Startseite

Rust 1.95.0: cfg_select!, if-let-Wächter und stabile APIs | Überblick

Überblick über die Rust 1.95.0-Veröffentlichung: neue Features für Entwickler. cfg_select!-Makro ersetzt cfg-if, Unterstützung für if-let-Wächter in match-Ausdrücken, Stabilisierung wichtiger APIs. Praktische Beispiele und Migrationsempfehlungen.

Rust 1.95.0: Wie neue Features die Entwicklung vereinfachen
Advertisement 728x90

Rust 1.95.0: Wie neue Features die Rust-Entwicklung vereinfachen

Die stabile Version von Rust 1.95.0 wurde veröffentlicht und erweitert die Möglichkeiten der Sprache, sicheren und effizienten Code zu erstellen. Die wichtigsten Änderungen konzentrieren sich auf die Vereinfachung der bedingten Kompilierung, die Verbesserung der Syntax für Pattern Matching und die Stabilisierung kritischer APIs. Diese Updates wirken sich direkt auf die tägliche Arbeit der Entwickler aus, indem sie die kognitive Belastung reduzieren und Boilerplate-Code minimieren.

Das cfg_select!-Makro: Eine integrierte Alternative zu cfg-if

Das neue cfg_select!-Makro löst das Problem plattformabhängiger Implementierungen, das zuvor den externen Crate cfg-if erforderte. Nun ist die bedingte Kompilierung zur Build-Zeit in die Standardbibliothek integriert. Das Makro funktioniert wie match für cfg-Direktiven und wählt den ersten Zweig mit einem wahren Prädikat aus. Das ist besonders nützlich für die Implementierung plattformübergreifender Bibliotheken, bei denen unterschiedlicher Code für Unix, Windows oder Architekturen benötigt wird.

Beispiel für die Verwendung:

Google AdInline article slot
cfg_select! {
    unix => {
        fn platform_specific() { /* Sale for Unix */ }
    }
    target_pointer_width = "32" => {
        fn platform_specific() { /* 32-bitnaya realizatsiya */ }
    }
    _ => {
        fn platform_specific() { /* Defolt */ }
    }
}

Hauptvorteil: Keine Abhängigkeit von externen Crates und einheitliche Syntax mit anderen Rust-Makros. Hinweis: Das Makro erweitert sich zur Kompilierzeit zu einem einzigen Zweig, sodass ungenutzte Code-Teile vollständig aus dem Binärfile ausgeschlossen werden.

if-let-Guards in match-Expressions: Erweiterung der Pattern-Matching-Fähigkeiten

Rust 1.95.0 stabilisiert if-let-Guards innerhalb von match-Expressions, sodass Pattern Matching und bedingte Überprüfungen in einem einzigen Zweig kombiniert werden können. Diese Funktion, die zuvor nur in Nightly-Versionen verfügbar war, ist nun im stabilen Kanal verfügbar. Die Syntax bleibt knapp und lesbar und vermeidet verschachtelte match-Expressions.

Beispiel:

Google AdInline article slot
match data {
    Some(x) if let Ok(y) = process(x) => {
        // Dostupny x and y
        handle(x, y);
    }
    _ => fallback(),
}

Wichtige Einschränkung: Der Compiler berücksichtigt Patterns in if-let-Guards nicht bei der Exhaustiveness-Prüfung. Das bedeutet, dass ein Zweig mit einem if-let-Guard nicht garantiert alle möglichen Fälle abdeckt, im Gegensatz zu einem regulären match. Entwickler sollten die Abdeckung von Szenarien explizit überprüfen.

Stabilisierte APIs: Wichtige Änderungen

Die Veröffentlichung stabilisiert über 30 APIs, die Low-Level-Operationen und Speicherverwaltung betreffen. Hauptgruppen der Änderungen:

  • Verwaltung uninitialisierten Speichers: From-, AsRef- und AsMut-Methoden für MaybeUninit<[T; N]> vereinfachen die Arbeit mit Rohpuffern.
  • Atomare Operationen: Hinzugefügt update und try_update für AtomicPtr, AtomicBool, AtomicInt, AtomicUint.
  • Kollektionsoperationen: Neue push_mut- und insert_mut-Methoden für Vec, VecDeque, LinkedList.
  • Low-Level-Hilfsfunktionen: Layout::dangling_ptr, Layout::repeat, cold_path.

Besonders interessant ist die Stabilisierung von bool: TryFrom<{integer}>, die eine sichere Konvertierung von Integer-Typen zu Booleans über TryFrom ermöglicht. Dadurch entfällt die Notwendigkeit manueller Überprüfungen wie value != 0.

Google AdInline article slot

Abschaffung benutzerdefinierter Targets: Was sich geändert hat

Rust 1.95.0 entfernt die Unterstützung für benutzerdefinierte JSON-Target-Spezifikationen im stabilen Kanal. Diese Funktion, die zuvor über die --target-Flag verfügbar war, erforderte selbst für grundlegende Standardbibliotheks-Builds Nightly-Tools. Nun stoßen Nutzer mit einem vollständig stabilen Toolchain nicht mehr auf unerwartete Fehler, verlieren aber die Möglichkeit, Targets anzupassen.

Das Rust-Team sammelt Anwendungsfälle im Tracking-Issue, um zu entscheiden, wie diese Funktion in Zukunft stabilisiert werden kann. Vorläufig auf offizielle Targets umsteigen oder den Nightly-Kanal für Experimente nutzen.

Wichtige Erkenntnisse

  • Das cfg_select!-Makro ersetzt cfg-if in der Standardbibliothek und schafft externe Abhängigkeiten ab.
  • if-let-Guards in match-Expressions vereinfachen komplexe Überprüfungen, beeinflussen aber nicht die Exhaustiveness-Prüfung.
  • Die Stabilisierung atomarer Operationen und Speichermethoden ist entscheidend für Systems Programming.
  • Die Entfernung benutzerdefinierter Targets im stabilen Kanal erfordert eine Überprüfung benutzerdefinierter Builds.

Ein Update auf Rust 1.95.0 wird für alle Projekte empfohlen, bei denen Unterstützung moderner APIs und vereinfachte bedingte Kompilierung relevant sind. Für Tests zukünftiger Releases den Beta-Kanal verwenden (rustup default beta).

— Editorial Team

Advertisement 728x90

Weiterlesen