Zurück zur Startseite

Rust 1.94.0: Neue Methoden und Cargo-Konfiguration | IT-Rezension

Rust 1.94.0 Release umfasst Stabilisierung der array_windows-Methode zur Verarbeitung fester Fensterlängen, Unterstützung für include-Schlüssel in Cargo-Konfigurationsdateien und Übergang zu TOML 1.1. Diese Änderungen vereinfachen das Schreiben von sicherem und lesbarem Code sowie flexible Projektkonfiguration. Update empfohlen für alle Rust-Entwickler.

Rust 1.94.0: Wie neue Features Ihren Code verbessern? Release-Details
Advertisement 728x90

# Rust 1.94.0: Stabilisierung von array_windows, include in Konfigurationen und Wechsel zu TOML 1.1

Rust 1.94.0 ist erschienen und bringt mehrere bedeutende Verbesserungen für Entwickler mit sich. Zu den wichtigsten Neuerungen gehören die Methode array_windows zum Iterieren über Arrays fester Länge, die Unterstützung für den include-Schlüssel in Cargo-Konfigurationsdateien und der Umstieg auf TOML 1.1. So erleichtern diese Änderungen Ihre Arbeit.

Die Methode array_windows: Arbeiten mit Fenstern fester Länge

In der neuen Rust-Version wurde die Methode array_windows für Slices stabilisiert. Sie ermöglicht das Iterieren über eine Slice mit Fenstern fester Länge und macht manuelles Indexieren sowie Bounds-Checking überflüssig. Im Gegensatz zur windows-Methode, die Slices dynamischer Länge (&[T]) zurückgibt, liefert array_windows Referenzen auf Arrays fester Länge (&[T; N]).

Das ist besonders nützlich bei Aufgaben, bei denen aufeinanderfolgende Elemente mit einer bekannten Fenstergröße verarbeitet werden müssen. Zum Beispiel, um das ABBA-Muster (zwei unterschiedliche Buchstaben gefolgt von ihrer umgekehrten Reihenfolge) in einem String zu finden, können Sie den folgenden Code verwenden:

Google AdInline article slot
fn has_abba(s: &str) -> bool {
    s.as_bytes()
        .array_windows()
        .any(|[a1, b1, b2, a2]| (a1 != b1) && (a1 == a2) && (b1 == b2))
}

Der Compiler schließt die Fensterlänge (4) automatisch aus dem Destructuring-Muster im Closure. Bei windows(4) müssten Sie die Indizes manuell prüfen, was weniger sicher und lesbar ist.

Cargo-Konfiguration mit dem include-Schlüssel verwalten

Cargo unterstützt nun den include-Schlüssel in Konfigurationsdateien (.cargo/config.toml). Diese Funktion vereinfacht die Organisation, das Teilen und das Verwalten von Konfigurationen über Projekte und Umgebungen hinweg.

Der include-Schlüssel kann ein Array von Pfaden oder eine Inline-Tabelle mit zusätzlichen Optionen sein. Zum Beispiel:

Google AdInline article slot
# Array von Pfaden
include = [
    "frodo.toml",
    "samwise.toml",
]

# Inline-Tabellen für Feinabstimmung
include = [
    { path = "required.toml" },
    { path = "optional.toml", optional = true },
]

Die Option optional = true erlaubt anzugeben, dass eine Datei in manchen Umgebungen fehlen darf (z. B. auf der lokalen Maschine eines Entwicklers). Das erhöht die Flexibilität der Konfiguration, ohne separate Branches zu benötigen.

Wechsel zu TOML 1.1: Was hat sich geändert

Cargo unterstützt nun vollständig TOML 1.1 für Manifeste und Konfigurationsdateien. Dazu gehören mehrere praktische Verbesserungen:

  • Möglichkeit, Inline-Tabellen über mehrere Zeilen mit nachfolgenden Kommas zu spannen.
  • Neue Escape-Sequenzen für Strings: \xHH und \e.
  • Optionale Sekunden in Zeitdarstellungen (Standard: 0).

Beispiel für eine mehrzeilige Inline-Tabelle:

Google AdInline article slot
serde = {
    version = "1.0",
    features = ["derive"],
}

Hinweis: Die Verwendung neuer TOML-1.1-Features in Cargo.toml erhöht die minimale unterstützte Rust-Version (MSRV) auf eine, die den neuen Cargo-Parser erfordert. Cargo schreibt das Manifest beim Veröffentlichen eines Crates jedoch automatisch in ein mit älteren Parsers kompatibles Format um. So können Sie die Unterstützung früherer Rust-Versionen für die Nutzer Ihres Crates aufrechterhalten.

Stabilisierte APIs: Vollständige Liste

Die Version 1.94.0 stabilisiert zahlreiche zuvor instabile APIs. Hier die wichtigsten:

  • Slice-Methoden: <[T]>::array_windows, <[T]>::element_offset
  • LazyCell-Methoden: get, get_mut, force_mut
  • LazyLock-Methoden: get, get_mut, force_mut
  • Konvertierung: impl TryFrom<char> for usize
  • Peekable-Methoden: next_if_map, next_if_map_mut
  • Intrinsic-Funktionen für x86 (AVX-512 FP16) und AArch64 (NEON FP16), außer denen, die vom instabilen f16-Typ abhängen
  • Mathematikkonstanten: f32::consts::EULER_GAMMA, f64::consts::EULER_GAMMA, f32::consts::GOLDEN_RATIO, f64::consts::GOLDEN_RATIO
  • f32::mul_add- und f64::mul_add-Methoden sind nun in const-Kontexten stabil

Diese Änderungen erweitern die Möglichkeiten der Standardbibliothek und machen Code ausdrucksstärker.

Wichtige Erkenntnisse für Entwickler

  • Vereinfachte Fensterbehandlung: Die Methode array_windows reduziert Boilerplate-Code bei festen Fenstern, verbessert Sicherheit und Lesbarkeit.
  • Konfigurationsflexibilität: Der include-Schlüssel in Cargo ermöglicht modulare Zusammenstellung von Konfigurationen, was besonders bei großen Projekten und Teams nützlich ist.
  • TOML-1.1-Kompatibilität: Neue TOML-Features machen Konfigurationsdateien bequemer, achten Sie aber bei Verwendung in Cargo.toml auf die MSRV.
  • Erweiterung der Standardbibliothek: Die Stabilisierung neuer APIs – einschließlich Mathematikkonstanten und Iterator-Methoden – vereinfacht alltägliche Aufgaben.

Ein Update auf Rust 1.94.0 wird für alle Entwickler empfohlen, um von diesen Verbesserungen zu profitieren. Verwenden Sie dazu rustup update stable.

— Editorial Team

Advertisement 728x90

Weiterlesen