# Rust 1.95.0: Jak nowe możliwości ułatwiają programowanie w Rust
Wydano stabilną wersję Rust 1.95.0, która rozszerza możliwości języka w celu tworzenia bezpiecznego i wydajnego kodu. Główne zmiany dotyczą uproszczenia kompilacji warunkowej, poprawy składni dopasowywania wzorców oraz stabilizacji kluczowych API. Te aktualizacje bezpośrednio wpływają na codzienną pracę programistów, zmniejszając obciążenie poznawcze i minimalizując kod boilerplate.
Makro cfg_select! — wbudowana alternatywa dla cfg-if
Nowe makro cfg_select! rozwiązuje problem implementacji zależnej od platformy, która wcześniej wymagała zewnętrznego crate'a cfg-if. Teraz kompilacja warunkowa na etapie budowania jest zintegrowana ze standardową biblioteką. Makro działa jak match dla dyrektyw cfg, wybierając pierwszą gałąź z prawdziwym predykatem. Jest to szczególnie przydatne przy implementacji bibliotek wieloplatformowych, gdzie potrzebny jest różny kod dla Unix, Windows czy architektur.
Przykład użycia:
cfg_select! {
unix => {
fn platform_specific() { /* Realizatsiya dla Unix */ }
}
target_pointer_width = "32" => {
fn platform_specific() { /* 32-bitowa realizacja */ }
}
_ => {
fn platform_specific() { /* Domyślna */ }
}
}
Kluczową zaletą jest brak zależności od zewnętrznych crate'ów i jednolita składnia z innymi makrami Rust. Uwaga: makro rozwija się do jednej gałęzi na etapie kompilacji, dlatego nieużywane części kodu są całkowicie wykluczone z pliku binarnego.
Strażniki if-let w wyrażeniach match: rozszerzenie możliwości dopasowywania
Rust 1.95.0 stabilizuje strażniki if-let wewnątrz wyrażeń match, co pozwala łączyć dopasowywanie wzorców z warunkowymi sprawdzeniami w jednej gałęzi. Ta funkcjonalność, wcześniej dostępna tylko w wersjach nightly, jest teraz dostępna w stabilnym kanale. Składnia zachowuje zwięzłość i czytelność, unikając zagnieżdżonych wyrażeń match.
Przykład:
match data {
Some(x) if let Ok(y) = process(x) => {
// Dostępne x i y
handle(x, y);
}
_ => fallback(),
}
Ważne ograniczenie: kompilator nie uwzględnia wzorców w strażnikach if-let podczas sprawdzania wyczerpującego dopasowania (exhaustiveness checking). Oznacza to, że gałąź ze strażnikiem if-let nie gwarantuje obsługi wszystkich możliwych wariantów, jak zwykły match. Programiści powinni jawnie sprawdzać pokrycie scenariuszy.
Zestabilizowane API: kluczowe zmiany
W wydaniu zestabilizowano ponad 30 API, dotyczących operacji niskopoziomowych i pracy z pamięcią. Główne grupy zmian:
- Zarządzanie nieinicjalizowaną pamięcią: Metody
From,AsRef,AsMutdlaMaybeUninit<[T; N]>ułatwiają pracę z surowymi buforami. - Operacje atomowe: Dodano
updateitry_updatedlaAtomicPtr,AtomicBool,AtomicInt,AtomicUint. - Praca z kolekcjami: Nowe metody
push_mut,insert_mutdlaVec,VecDeque,LinkedList. - Niskopoziomowe narzędzia:
Layout::dangling_ptr,Layout::repeat,cold_path.
Szczególne zainteresowanie budzi stabilizacja bool: TryFrom<{integer}>, która pozwala bezpiecznie konwertować typy liczbowe całkowite na wartości boolowe za pomocą TryFrom. Eliminuje to potrzebę ręcznych sprawdzeń typu value != 0.
Destabilizacja niestandardowych targetów: co się zmieniło
Rust 1.95.0 usuwa wsparcie dla niestandardowych specyfikacji JSON targetów w stabilnym kanale. Ta funkcjonalność, wcześniej dostępna przez flagę --target, wymagała narzędzi nightly nawet do podstawowej kompilacji standardowej biblioteki. Teraz użytkownicy w pełni stabilnego toolchain nie napotkają nieoczekiwanych błędów, ale stracą możliwość dostosowywania targetów.
Zespół Rust zbiera scenariusze użycia w tracking issue, aby określić, jak ustabilizować tę funkcjonalność w przyszłości. Na razie zalecane jest przejście na oficjalne targety lub użycie kanału nightly do eksperymentów.
Co ważne
- Makro
cfg_select!zastępujecfg-ifw standardowej bibliotece, eliminując zewnętrzną zależność. - Strażniki if-let w wyrażeniach match ułatwiają złożone sprawdzenia, ale nie wpływają na exhaustiveness checking.
- Stabilizacja operacji atomowych i metod pracy z pamięcią jest kluczowa dla programowania systemowego.
- Usunięcie niestandardowych targetów w stabilnym kanale wymaga przeglądu niestandardowych kompilacji.
Aktualizacja do Rust 1.95.0 jest zalecana dla wszystkich projektów, gdzie ważna jest obsługa nowoczesnych API i uproszczenie kompilacji warunkowej. Do testowania przyszłych wydań użyj kanału beta (rustup default beta).
— Editorial Team
Brak komentarzy.