Powrót do strony głównej

Rust 1.94.0: Nowe metody i konfiguracja Cargo | Przegląd IT

Wydanie Rust 1.94.0 obejmuje stabilizację metody array_windows do obsługi okien o stałej długości, wsparcie klucza include w plikach konfiguracyjnych Cargo i przejście na TOML 1.1. Te zmiany ułatwiają pisanie bezpiecznego i czytelnego kodu, a także elastyczną konfigurację projektów. Aktualizacja zalecana dla wszystkich programistów Rust.

Rust 1.94.0: Jak nowe funkcje poprawią Twój kod? Szczegóły wydania
Advertisement 728x90

# Rust 1.94.0: Stabilizacja array_windows, include w konfiguracjach i przejście na TOML 1.1

Ukazała się wersja Rust 1.94.0, która wnosi kilka istotnych ulepszeń dla deweloperów. Wśród kluczowych nowości — metoda array_windows do iteracji po tablicach o stałej długości, wsparcie dla klucza include w plikach konfiguracyjnych Cargo oraz przejście na TOML 1.1. Opowiadamy, jak te zmiany ułatwią wam pracę.

Metoda array_windows: praca z oknami o stałej długości

W nowej wersji Rust ustabilizowano metodę array_windows dla slice'ów. Umożliwia ona iterację po slicie z oknami o stałej długości, co eliminuje konieczność ręcznej indeksacji i sprawdzania granic. W przeciwieństwie do metody windows, która zwraca slice'y o dynamicznej długości (&[T]), array_windows zwraca odniesienia do tablic o stałej długości (&[T; N]).

To szczególnie przydatne w zadaniach wymagających przetwarzania sekwencyjnych elementów o znanym rozmiarze okna. Na przykład do wyszukiwania wzorca ABBA (dwie różne litery, po których następuje odwrotna kolejność tej pary) w ciągu znaków można użyć następującego kodu:

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))
}

Kompilator automatycznie wnioskuje długość okna (4) z wzorca destrukturyzacji w zamknięciu. Przy użyciu windows(4) trzeba by ręcznie sprawdzać indeksy, co jest mniej bezpieczne i czytelne.

Zarządzanie konfiguracją Cargo za pomocą klucza include

Cargo obsługuje teraz klucz include w plikach konfiguracyjnych (.cargo/config.toml). Ta funkcja ułatwia organizację, współdzielenie i zarządzanie konfiguracjami między projektami i środowiskami.

Klucz include może być tablicą ścieżek lub tabelą inline z dodatkowymi opcjami. Na przykład:

Google AdInline article slot
# Tablica ścieżek
include = [
    "frodo.toml",
    "samwise.toml",
]

# Tabele inline do precyzyjnego dostosowania
include = [
    { path = "required.toml" },
    { path = "optional.toml", optional = true },
]

Opcja optional = true pozwala wskazać, że plik może nie istnieć w niektórych środowiskach (np. na lokalnej maszynie dewelopera). To zwiększa elastyczność konfiguracji bez potrzeby utrzymywania oddzielnych gałęzi.

Przejście na TOML 1.1: co się zmieniło

Cargo w pełni obsługuje teraz TOML w wersji 1.1 dla manifestów i plików konfiguracyjnych. Obejmuje to kilka wygodnych ulepszeń:

  • Możliwość umieszczania tabel inline na wielu liniach z końcowymi przecinkami.
  • Nowe sekwencje ucieczki dla ciągów: \xHH i \e.
  • Opcjonalne sekundy w reprezentacji czasu (wartość domyślna — 0).

Przykład użycia wieloliniowej tabeli inline:

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

Uwaga: Użycie nowych funkcji TOML 1.1 w Cargo.toml podnosi minimalną obsługiwaną wersję Rust (MSRV) do poziomu wymagającego nowego parsera Cargo. Jednak przy publikowaniu krate Cargo automatycznie przepisuje manifest do formatu zgodnego ze starszymi parserami. Pozwala to zachować obsługę wcześniejszych wersji Rust dla użytkowników waszej krate.

Zestabilizowane API: pełna lista

W wersji 1.94.0 ustabilizowano wiele API, które wcześniej były w fazie rozwoju. Oto główne z nich:

  • Metody dla slice'ów: <[T]>::array_windows, <[T]>::element_offset
  • Metody dla LazyCell: get, get_mut, force_mut
  • Metody dla LazyLock: get, get_mut, force_mut
  • Konwersja: impl TryFrom<char> for usize
  • Metody dla Peekable: next_if_map, next_if_map_mut
  • Funkcje intrinsic dla x86 (AVX-512 FP16) i AArch64 (NEON FP16), z wyjątkiem zależnych od niestabilnego typu f16
  • Stałe matematyczne: f32::consts::EULER_GAMMA, f64::consts::EULER_GAMMA, f32::consts::GOLDEN_RATIO, f64::consts::GOLDEN_RATIO
  • Metody f32::mul_add i f64::mul_add są teraz stabilne w kontekstach const

Te zmiany rozszerzają możliwości standardowej biblioteki i czynią kod bardziej wyrazistym.

Co ważne: kluczowe wnioski dla deweloperów

  • Uproszczenie przetwarzania okien: Metoda array_windows redukuje kod szablonowy przy pracy z oknami o stałej długości, zwiększając bezpieczeństwo i czytelność.
  • Elastyczność konfiguracji: Klucz include w Cargo pozwala modularnie składać konfiguracje, co jest szczególnie przydatne w dużych projektach i zespołach.
  • Zgodność z TOML 1.1: Nowe funkcje TOML czynią pliki konfiguracyjne wygodniejszymi, ale wymagają uwzględnienia MSRV przy użyciu w Cargo.toml.
  • Rozszerzenie standardowej biblioteki: Stabilizacja nowych API, w tym stałych matematycznych i metod dla iteratorów, ułatwia rozwiązywanie codziennych zadań.

Aktualizacja do Rust 1.94.0 jest zalecana dla wszystkich deweloperów, aby skorzystać z tych ulepszeń. Do instalacji użyjcie polecenia rustup update stable.

— Editorial Team

Advertisement 728x90

Czytaj dalej