# Rust 1.95.0: Jak nové funkce usnadňují vývoj v Rustu
Vydán stabilní release Rustu 1.95.0, který rozšiřuje možnosti jazyka pro tvorbu bezpečného a efektivního kódu. Hlavní změny se týkají zjednodušení podmíněné kompilace, zlepšení syntaxe pro porovnávání se vzorem a stabilizace klíčových API. Tyto aktualizace přímo ovlivňují každodenní práci vývojářů tím, že snižují kognitivní zátěž a minimalizují boilerplate kód.
Makro cfg_select! — vestavěná alternativa k cfg-if
Nové makro cfg_select! řeší problém platformně závislé implementace, která dříve vyžadovala externí crate cfg-if. Nyní je podmíněná kompilace v době sestavení integrována do standardní knihovny. Makro funguje jako match pro direktivy cfg a vybere první větev s pravdivým predikátem. To je obzvláště užitečné při implementaci knihoven napříč platformami, kde je potřeba různý kód pro Unix, Windows nebo architektury.
Příklad použití:
cfg_select! {
unix => {
fn platform_specific() { /* Sale for Unix */ }
}
target_pointer_width = "32" => {
fn platform_specific() { /* 32-bitnaya realizatsiya */ }
}
_ => {
fn platform_specific() { /* Defolt */ }
}
}
Klíčová výhoda — absence závislosti na externích cratech a jednotný syntax s ostatními makry Rustu. Upozornění: makro se rozbalí do jedné větve v době kompilace, takže nepoužité části kódu jsou z binárníku úplně vyřazeny.
if-let strážci v match-výrazech: rozšíření možností porovnávání
Rust 1.95.0 stabilizuje if-let strážce uvnitř match-výrazů, což umožňuje kombinovat porovnávání se vzorem a podmínkové kontroly v jedné větvi. Tato funkce, dříve dostupná jen v nightly verzích, je nyní ve stabilním kanálu. Syntax zachovává stručnost a čitelnost, čímž se vyhýbá vnořeným match-výrazům.
Příklad:
match data {
Some(x) if let Ok(y) = process(x) => {
// Dostupny x and y
handle(x, y);
}
_ => fallback(),
}
Důležité omezení: kompilátor nezohledňuje vzory v if-let strážcích při kontrole vyčerpávajícího porovnávání (exhaustiveness checking). To znamená, že větev s if-let strážcem negarantuje zpracování všech možných variant jako běžný match. Vývojáři by měli explicitně kontrolovat pokrytí scénářů.
Stabilizované API: klíčové změny
V releasu bylo stabilizováno více než 30 API týkajících se nízkourovňových operací a práce s pamětí. Hlavní skupiny změn:
- Správa neinicilizované paměti: Metody
From,AsRef,AsMutproMaybeUninit<[T; N]>usnadňují práci s raw buffery. - Atomové operace: Přidány
updateatry_updateproAtomicPtr,AtomicBool,AtomicInt,AtomicUint. - Práce s kolekcemi: Nové metody
push_mut,insert_mutproVec,VecDeque,LinkedList. - Nízkourovňové utilitky:
Layout::dangling_ptr,Layout::repeat,cold_path.
Osobitný zájem vzbuzuje stabilizace bool: TryFrom<{integer}>, která umožňuje bezpečně převádět celočíselné typy na boolovské hodnoty přes TryFrom. To eliminuje potřebu manuálních kontrol jako value != 0.
Destabilizace uživatelských cílů: co se změnilo
Rust 1.95.0 odstraňuje podporu uživatelských JSON specifikací cílů ve stabilním kanálu. Tato funkce, dříve dostupná přes příznak --target, vyžadovala nightly nástroje i pro základní sestavení standardní knihovny. Nyní uživatelé plně stabilního toolchainu nenarazí na neočekávané chyby, ale ztratí možnost customizace cílů.
Tým Rustu sbírá scénáře použití v tracking issue, aby určil, jak tuto funkci v budoucnu stabilizovat. Prozatím se doporučuje přejít na oficiální cíle nebo použít nightly kanál pro experimenty.
Co je důležité
- Makro
cfg_select!nahrazujecfg-ifve standardní knihovně a odstraňuje externí závislost. - if-let strážci v match-výrazech usnadňují složité kontroly, ale neovlivňují exhaustiveness checking.
- Stabilizace atomových operací a metod práce s pamětí je klíčová pro systémové programování.
- Odstranění uživatelských cílů ve stabilním kanálu vyžaduje přehodnocení custom sestavení.
Aktualizace na Rust 1.95.0 se doporučuje pro všechny projekty, kde je důležitá podpora moderních API a zjednodušení podmíněné kompilace. Pro testování budoucích releasů použijte beta kanál (rustup default beta).
— Editorial Team
Zatím žádné komentáře.