# 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:
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:
# 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:
\xHHi\e. - Opcjonalne sekundy w reprezentacji czasu (wartość domyślna — 0).
Przykład użycia wieloliniowej tabeli inline:
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_addif64::mul_addsą teraz stabilne w kontekstachconst
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_windowsredukuje kod szablonowy przy pracy z oknami o stałej długości, zwiększając bezpieczeństwo i czytelność. - Elastyczność konfiguracji: Klucz
includew 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
Brak komentarzy.