Opublikowano wersję języka programowania Rust 1.95, rozwijanego przez projekt Mozilla, obecnie pod patronatem niezależnej organizacji non-profit Rust Foundation. Język koncentruje się na bezpiecznym zarządzaniu pamięcią i zapewnia środki do osiągania wysokiego poziomu równoległości wykonania zadań, bez potrzeby korzystania z garbage collectora i runtime (runtime ogranicza się do podstawowej inicjalizacji i wspierania standardowej biblioteki).
Metody zarządzania pamięcią w Rust mają na celu eliminację błędów przy manipulacji wskaźnikami oraz ochronę przed problemami wynikającymi z niskopoziomowego zarządzania pamięcią, takimi jak dostęp do pamięci po jej zwolnieniu, dereferencjonowanie wskaźników zerowych, czy przekroczenie granic bufora itd. Aby ułatwić dystrybucję bibliotek, budowanie oraz zarządzanie zależnościami, projekt rozwija menedżer pakietów Cargo. Wsparcie dla repozytoriów bibliotek zapewnia repozytorium crates.io.
Bezpieczne zarządzanie pamięcią w Rust jest zapewnione podczas kompilacji poprzez kontrolę referencji, śledzenie własności obiektów, uwzględnianie czasu życia obiektów (zakresu widoczności) oraz ocenę prawidłowości dostępu do pamięci w czasie wykonywania kodu. Rust oferuje również narzędzia do ochrony przed przepełnieniami liczbowymi, wymaga obowiązkowej inicjalizacji wartości zmiennych przed użyciem, lepiej obsługuje błędy w standardowej bibliotece, stosuje koncepcję niemutowalności (immutable) referencji i zmiennych domyślnie oraz oferuje silne statyczne typowanie w celu minimalizacji błędów logicznych.
Główne nowości:
- Dodano makro „cfg_select!”, które można stosować zamiast pakietu „cfg-if” do obsługi wielu warunków kompilacji w stylu bloku „match”, bez definiowania łańcucha wyrażeń warunkowych z konstrukcją „#[cfg]”. cfg_select! { unix => { fn foo() { /* unix */ } } target_pointer_width = „32” => { fn foo() { /* nie-unix, 32-bit */ } } _ => { fn foo() { /* nie unix i nie 32-bit */ } } }
- Zdecydowano o stabilizacji możliwości użycia wyrażeń „if let” wewnątrz bloków „match” w celu tworzenia warunkowych dopasowań wzorcowych. Wcześniej stabilizowano wsparcie dla wielu wyrażeń „let” z użyciem operatora „&&” dla bloków „if” i „while”. match value { Some(x) if let Ok(y) = compute(x) => { println!(„{}, {}”, x, y); } _ => {} }
- Zdecydowano o stabilizacji wsparcia dla inline-assemblatora dla architektur PowerPC i PowerPC64.
- Nowa porcja API została wprowadzona do stabilnej wersji, w tym ustabilizowane metody i implementacje traitów:
- MaybeUninit: From<[MaybeUninit; N]>
- MaybeUninit: AsRef<[MaybeUninit; N]>
- MaybeUninit: AsRef<[MaybeUninit]>
- MaybeUninit: AsMut<[MaybeUninit; N]>
- MaybeUninit: AsMut<[MaybeUninit]>
- [MaybeUninit; N]: From<MaybeUninit
- Cell: AsRef<[Cell; N]>
- Cell: AsRef<[Cell]>
- Cell: AsRef<[Cell]>
- bool: TryFrom
- 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
- ::as_ref_unchecked
- ::as_ref_unchecked
- ::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
- Wskaźnik „const” zastosowany w funkcjach:
- fmt::from_fn
- ControlFlow::is_break
- ControlFlow::is_continue
- W stabilnych wersjach narzędzi usunięto wsparcie dla przekazywania kompilatorowi specyfikacji własnych platform docelowych.
- Docelowe platformy powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos i aarch64-apple-visionos-sim otrzymały drugi poziom wsparcia, co oznacza gwarancję kompilacji, ale brak gwarancji przy przechodzeniu zestawu testowego.
Dodatkowo można zauważyć ostatnio ogłoszone projekty i wydarzenia związane z Rust:
- Firma Canonical zaprezentowała serwer wyświetlacza Mir 2.26, który oferuje zestaw bibliotek do tworzenia kompozytów serwerów opartych na protokole Wayland i zawiera typowe funkcjonalności menedżerów okien oraz serwerów wyświetlacza. Mir jest wykorzystywany w takich projektach jak menedżer kompozytów Miracle, powłoka dla kiosków internetowych Ubuntu Frame oraz środowisko graficzne Miriway.
Nowa wersja wyróżnia się dodaniem możliwości tworzenia komponentów w języku Rust. W Rust zaimplementowano alternatywny podsystem zarządzania wejściem evdev-rs oraz rozpoczęto prace nad front-endem wayland-rs napisanym w Rust dla Wayland. Z niezwiązanych z Rust zmian w Mir odnotowano wsparcie dla protokołów Wayland ext_image_copy_capture_v1 oraz input-triggers.
- Opublikowano pierwszą wersję analizatora ruchu ayaFlow, napisanego w Rust i wykorzystującego podsystem jądra Linux eBPF do przechwytywania pakietów sieciowych (IPv4/TCP/UDP) oraz ram Ethernet przy minimalnym wpływie na wydajność. Obsługuje głęboką inspekcję protokołów warstwy aplikacji (L7), np. ekstrakcję TLS SNI oraz zapytań DNS podczas analizy ruchu szyfrowanego. System wspiera prowadzenie tabeli z aktualnym stanem połączeń w formacie DashMap, przechowywanie historii w SQLite oraz dostarczanie statystyk przez REST API dla Prometheus.
- Zrealizowano możliwość tworzenia aplikacji wielowątkowych w języku Rust, które wykorzystują funkcje std::thread i są wykonywane po stronie GPU.
Źródło: opennet.ru
