Zpět na domů

Rust 1.95.0: cfg_select!, if-let guards a stabilní API | Přehled

Přehled vydání Rust 1.95.0: nové funkce pro vývojáře. Makro cfg_select! nahrazuje cfg-if, podpora if-let guards v match-výrazech, stabilizace klíčových API. Praktické příklady a doporučení k migraci.

Rust 1.95.0: Jak nové funkce zjednodušují vývoj
Advertisement 728x90

# 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í:

Google AdInline article slot
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:

Google AdInline article slot
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, AsMut pro MaybeUninit<[T; N]> usnadňují práci s raw buffery.
  • Atomové operace: Přidány update a try_update pro AtomicPtr, AtomicBool, AtomicInt, AtomicUint.
  • Práce s kolekcemi: Nové metody push_mut, insert_mut pro Vec, 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.

Google AdInline article slot

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! nahrazuje cfg-if ve 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

Advertisement 728x90

Číst dál