Vydání Rust 1.95. Přidání Rustu do zobrazovacího serveru Mir. Analyzátor provozu ayaFlow na Rustu

Byla zveřejněna verze programovacího jazyka Rust 1.95, vytvořeného projektem Mozilla, ale nyní vyvíjeného pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se zaměřuje na bezpečné zacházení s pamětí a poskytuje prostředky pro dosažení vysoké paralelnosti vykonávání úkolů, a to bez používání garbage collectoru a runtime (runtime se shrnuje na základní inicializaci a údržbu standardní knihovny).

Metody manipulace s pamětí v Rustu se zaměřují na eliminaci chyb při manipulaci s ukazateli a poskytují ochranu proti problémům vyplývajícím z nízkoúrovňové práce s pamětí, jako je přístup k uvolněné oblasti paměti, dereference nulových ukazatelů, přetečení bufferu atd. Pro distribuci knihoven, zajištění sestavení a správu závislostí se vyvíjí balíčkový manažer Cargo. Pro ukládání knihoven je podporován repozitář crates.io.

Bezpečné manipulace s pamětí jsou v Rustu zajištěny během kompilace prostřednictvím kontroly referencí, sledování vlastnictví objektů, zohlednění doby života objektů (viditelnosti) a hodnocení správnosti přístupu k paměti při vykonávání kódu. Rust také poskytuje prostředky pro ochranu proti přetečení celých čísel, vyžaduje povinnou inicializaci hodnot proměnných před použitím, lépe zpracovává chyby ve standardní knihovně, aplikuje koncept neměnnosti (immutable) referencí a proměnných ve výchozím nastavení a nabízí silnou statickou typizaci pro minimalizaci logických chyb.

Hlavní novinky:

  • Byl přidán makro „cfg_select!“, které může být použito namísto balíčku „cfg-if“ pro zpracování několika podmínek překladu ve stylu bloku „match“, bez nutnosti definovat řetězec podmínkových výrazů s konstrukcí „#[cfg]“. cfg_select! { unix => { fn foo() { /* unix */ } } target_pointer_width = "32" => { fn foo() { /* ne-unix, 32-bit */ } } _ => { fn foo() { /* ne unix a ne 32-bit */ } } }
  • Byla stabilizována schopnost uvádět výrazy „if let“ uvnitř bloků „match“ pro vytváření podmínkových přiřazení podle vzoru. Dříve byla stabilizována podpora zadávání více výrazů „let“ pomocí operátoru „&&“ pro bloky „if“ a „while“. match value { Some(x) if let Ok(y) = compute(x) => { println!("{}, {}", x, y); } _ => {} }
  • Byla stabilizována podpora inline assembleru pro architektury PowerPC a PowerPC64.
  • Nová sada API byla převedena do stabilního stavu, včetně stabilizovaných metod a implementací typů:
    • MaybeUninit<[T; N]>: From<[MaybeUninit<T>; N]>
    • MaybeUninit<[T; N]>: AsRef<[MaybeUninit<T>; N]>
    • MaybeUninit<[T; N]>: AsRef<[MaybeUninit<T>]>
    • MaybeUninit<[T; N]>: AsMut<[MaybeUninit<T>; N]>
    • MaybeUninit<[T; N]>: AsMut<[MaybeUninit<T>]>
    • [MaybeUninit<T>; N]: From<MaybeUninit<[T; N]>
    • Cell<[T; N]>: AsRef<[Cell<T>; N]>
    • Cell<[T; N]>: AsRef<[Cell<T>]>
    • Cell<[T]>: AsRef<[Cell<T>]>
    • bool: TryFrom<{integer}>
    • AtomicPtr::update
    • AtomicPtr::try_update
    • AtomicBool::update
    • AtomicBool::try_update
    • AtomicIn::update
    • AtomicIn::try_update
    • AtomicUn::update
    • AtomicUn::try_update
    • cfg_select!
    • mod core::range
    • core::range::RangeInclusive
    • core::range::RangeInclusiveIter
    • core::hint::cold_path
    • <*const T>::as_ref_unchecked
    • <*mut T>::as_ref_unchecked
    • <*mut T>::as_mut_unchecked
    • Vec::push_mut
    • Vec::insert_mut
    • VecDeque::push_front_mut
    • VecDeque::push_back_mut
    • VecDeque::insert_mut
    • LinkedList::push_front_mut
    • LinkedList::push_back_mut
    • Layout::dangling_ptr
    • Layout::repeat
    • Layout::repeat_packed
    • Layout::extend_packed
  • Příznak „const“ byl použit ve funkcích:
    • fmt::from_fn
    • ControlFlow::is_break
    • ControlFlow::is_continue
  • Ve stabilních verzích nástrojů byla odstraněna podpora předávání specifikací vlastním cílovým platformám pro překladač.
  • Cílové platformy powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos a aarch64-apple-visionos-sim byly převedeny na druhou úroveň podpory, která zahrnuje záruku sestavení, ale bez záruk během testovacího setu.

Dodatečně lze zmínit nedávno oznámené projekty a akce spojené s Rust:

  • Společnost Canonical představila zobrazovací server Mir 2.26, který poskytuje sadu knihoven pro vytváření kompozitních servery na bázi protokolu Wayland a zahrnující typové funkce správce oken a zobrazovacích serverů. Mir je zapojen do takových projektů, jako je kompozitor Miracle, rozhraní pro internetové kiosky Ubuntu Frame a uživatelské prostředí Miriway.

    Nová verze se vyznačuje přidáním možnosti vývoje komponentů v jazyce Rust. V Rustu byla implementována alternativní podsystem správy vstupu evdev-rs a započala práce na frontendu wayland-rs napsaném v Rustu pro Wayland. Mezi změnami nesouvisejícími s Rustem v Miru byla podpora protokolů Wayland ext_image_copy_capture_v1 a input-triggers.

  • Bylo zveřejněno první vydání analyzátoru provozu ayaFlow, napsaného v Rustu a používajícího podsystem jádra Linux eBPF k zachycení síťových paketů (IPv4/TCP/UDP) a rámců Ethernet s minimálním vlivem na výkon. Podporuje hlubokou analýzu protokolů aplikační úrovně (L7), například extrakci TLS SNI a DNS dotazů při analýze šifrovaného provozu. Systém podporuje vedení tabulky se současným stavem spojení ve formátu DashMap, ukládání historie v SQLite a poskytování statistik prostřednictvím REST API pro Prometheus.
  • Byla implementována možnost vytváření vícethreadových aplikací v jazyce Rust, které využívají funkce std::thread a jsou vykonávány na straně GPU.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster