Wydanie Rust 1.92. Projekty Rust dla GUI, izolacji sandboxowej i tworzenia firmware'a

Opublikowana została wersja języka programowania Rust 1.92, opracowanego przez projekt Mozilla, a obecnie rozwijanego pod auspicjami niezależnej organizacji non-profit Rust Foundation. Język ten koncentruje się na bezpiecznym zarządzaniu pamięcią i oferuje narzędzia do osiągania wysokiego poziomu równoległości w wykonywaniu zadań, przy tym obywa się bez użycia zbieracza śmieci i runtime (runtime ogranicza się do podstawowej inicjalizacji i ewaluacji standardowej biblioteki).

Metody zarządzania pamięcią w Rust eliminują błędy związane z manipulowaniem wskaźnikami oraz chronią przed problemami wynikającymi z niskopoziomowej obsługi pamięci, takimi jak dostęp do pamięci po jej zwolnieniu, dereferencjonowanie wskaźników zerowych, wychodzenie poza granice bufora itp. Dla rozprowadzania bibliotek, zapewnienia budowy i zarządzania zależnościami, rozwijany jest menedżer pakietów Cargo. Dla publikacji bibliotek wspierany jest 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:

  • Stabilizacja typu "never", oznaczanego symbolem "!", który definiuje obliczenia, które nigdy nie zwracają wartości (na przykład funkcja "exits", makro "panic!" i nieskończone pętle nigdy nie zwracają kontroli), została kontynuowana. W nowej wersji sprawdzenia Lint "never_type_fallback_flowing_into_unsafe" i "dependency_on_unit_never_type_fallback" domyślnie przełączono z generowania ostrzeżeń na generowanie błędów kompilacji. Te kontrole uruchamiają się w przypadku problemów w kodzie, które pojawiają się przy użyciu typu "never".

    Wstępne szacunki wskazują, że podobne problemy występują w około 500 pakietach crate. Włączenie kontroli lint pozwoli przygotować się do stabilizacji typu "never", który na razie uznawany jest za eksperymentalną funkcjonalność. Kontrole lint działają tylko podczas bezpośredniej kompilacji pakietów i nie manifestują się przy kompilacji zależności. Kontrole można również wyłączyć za pomocą atrybutu "#[allow]".

  • Zmieniono zachowanie kontroli lint "unused_must_use", która uruchamia się przy ignorowaniu wartości zwracanej przez funkcję, jeśli funkcja lub zwracany typ są oznaczone atrybutem "#[must_use]". W nowej wersji zaprzestano generowania ostrzeżeń o ignorowaniu zwracanych wartości z typami Result i ControlFlow, w których stan błędu definiowany jest przez typ bez wartości ("!" lub "Infallible"). Na przykład: "fn can_never_fail() -> Result {…}".
  • Zmieniono zachowanie flagi "-Cpanic=abort", przy ustawieniu której domyślnie włączona jest generacja tabel unwind dla wykonywania śledzenia stosu (backtrace). Aby przywrócić stare zachowanie, przewidziano opcję "-Cforce-unwind-tables=no".
  • Zaostrzone zostały kontrole argumentów atrybutu "#[macro_export]". Przy podaniu niewłaściwych atrybutów generowany będzie błąd, a nie ostrzeżenie. Problemy z "#[macro_export]" będą kontrolowane nie tylko podczas bezpośredniej kompilacji pakietu crate, ale również podczas kompilacji zależności.
  • W safe-code dozwolone jest uzyskiwanie wskaźników raw («&raw [mut | const]») na pola w typach union.
  • Dla platformy docelowej mips64el-unknown-linux-muslabi64 zrealizowano wsparcie dla dynamicznego łączenia.
  • Minimalnie wspierana wersja zewnętrznego narzędzia LLVM została podniesiona do gałęzi LLVM 20.
  • Nowa porcja API została wprowadzona do stabilnej wersji, w tym ustabilizowane metody i implementacje traitów:
    • NonZero::div_ceil
    • Location::file_as_c_str
    • RwLockWriteGuard::downgrade
    • Box::new_zeroed
    • Box::new_zeroed_slice
    • Rc::new_zeroed
    • Rc::new_zeroed_slice
    • Arc::new_zeroed
    • Arc::new_zeroed_slice
    • btree_map::Entry::insert_entry
    • btree_map::VacantEntry::insert_entry
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
  • Wskaźnik „const” zastosowany w funkcjach:
    • ::rotate_left
    • ::rotate_right
  • W menedżerze pakietów Cargo zapewniono powtórzenie operacji „git fetch” w przypadku niepowodzenia pierwszego żądania. Dodano komponenty do integracji z emulatorem terminala Ghostty. Do przewodnika dodano nowy rozdział o optymalizacji procesu budowy.

Dodatkowo można zauważyć ostatnio ogłoszone projekty i wydarzenia związane z Rust:

  • Firma Ferrocene ogłosiła uzyskanie certyfikatu IEC 61508 (SIL 2) dla biblioteki libcore, obejmującej podzbiór wywołań ze standardowej biblioteki Rust. Certyfikacja potwierdza, że biblioteka spełnia wymagania dla krytycznych systemów przemysłowych. Firma Ferrocene jest znana z tworzenia narzędzi do rozwoju aplikacji w języku Rust dla systemów krytycznych oraz z utrzymywania specyfikacji FLS (Ferrocene Language Specification), na podstawie której rozwijana jest wzorcowa specyfikacja języka Rust.
  • Opublikowano wydanie biblioteki Iced 0.14 do tworzenia graficznych interfejsów użytkownika z użyciem modelu reaktywnego programowania. W Iced zrealizowano architekturę znaną programistom zaznajomionym z językiem deklaratywnym do budowy interfejsów Elm. Oferowany jest gotowy zestaw widgetów z możliwością tworzenia asynchronicznych obsługiwaczy i zastosowania adaptacyjnego układu elementów interfejsu w zależności od rozmiaru okna i ekranu. Udostępniono kilka silników rysujących, wspierających Vulkan, Metal i DX12. Z większych projektów, które korzystają z Iced, można wyróżnić środowisko graficzne COSMIC.

    W nowej wersji dodano widżety „table”, „grid”, „sensor”, „float” i „pin”, a także rozszerzono możliwości widżetu do pracy z formatowaniem Markdown. Zrealizowano: tryb reaktywnego rysowania; paski przewijania pojawiające się w razie potrzeby; API do pracy z animacją; wsparcie dla metod wprowadzania; tryb headless; możliwość wprowadzania zmian bez zatrzymywania aplikacji (hot reloading); równoległe dekodowanie obrazów; narzędzia do debugowania i profilowania wydajności.

  • Projekt Ribir rozwija bibliotekę do tworzenia aplikacji wieloplatformowych z interfejsem graficznym, która umożliwia wykorzystanie jednej wspólnej bazy kodu do tworzenia aplikacji graficznych na różne platformy (Linux, Windows, macOS, w planach Android i iOS). Dostępny jest deklaratywny język budowy interfejsu oparty na makrach Rust, ponad 20 widżetów, motywy oraz renderowanie oparte na wgpu.
  • Przedstawiono narzędzie Island, przeznaczone do izolowanego uruchamiania aplikacji. Do izolacji sandboxowej wykorzystano mechanizm Landlock. Island umożliwia tworzenie reguł w formacie TOML i stosowanie ich do izolacji istniejących plików wykonywalnych za pomocą Landlock, bez konieczności wprowadzania zmian w kodzie. W przeciwieństwie do Firejail narzędzie Island nie wymaga uprawnień root ani specjalnych uprawnień.
  • Firma Google zaprezentowała narzędzie Wasefire, napisane w Rust, do opracowywania zabezpieczonych firmware'ów. Główna idea polega na uruchamianiu na bazowym środowisku firmware (platformy) pojedynczych, izolowanych handlerów (appletów). Opracowanie firmware'u nie jest związane z językami programowania — komponenty firmware'u mogą być dostarczane w formacie WebAssembly z rozszerzeniami WASI (WebAssembly System Interface) i uruchamiane za pomocą Wasmtime.
  • Opublikowano wydanie firmware'u UEFI Patina 18, napisanego w Rust. Patina oferuje zamiennik dla podstawowych komponentów firmware'u UEFI i może być używana do stopniowego przekształcania istniejących firmware'ów, napisanych w C, na język Rust.
  • Projekt Brimstone rozwija nowy silnik JavaScript, napisany od podstaw w języku Rust. W obecnej wersji wspieranych jest już ponad 97% możliwości ECMAScript 2026. Wirtualna maszyna do wykonywania bajtkodu została zaprojektowana z uwzględnieniem architektury silnika V8.
  • Projekt Catten rozwija jądro dla eksperymentalnego systemu operacyjnego CharlotteOS, napisanego w Rust. Jądro wspiera zarządzanie dostępem oparte na "capability" (na wzór Fuchsia) i stosuje podobną do Plan 9 rozproszoną hierarchię zasobów z adresowaniem ścieżek plików za pomocą URI.
  • Opublikowano wersję interaktywnej powłoki Fish 4.2.0 (przyjazna interaktywna powłoka). Gałąź 4.x wyróżnia się pełnym przetłumaczeniem bazy kodu z języka C++ na Rust.
  • Firma Cloudflare udostępniła kod biblioteki Rust tokio-quiche, do wbudowywania wsparcia dla protokołów QUIC i HTTP/3 w aplikacjach asynchronicznych opartych na frameworku Tokio.
  • Projekt Tor opublikował wersje Arti 1.7 i 1.8, realizacji narzędzi Tor, napisanej w języku Rust. Gdy kod Arti osiągnie poziom, który w pełni zastąpi wersję napisaną w C, programiści Tor zamierzają nadać Arti status głównej realizacji Tor i stopniowo zakończyć wsparcie dla realizacji w C.

    W nowej wersji ustabilizowano implementację ograniczonego definiowania usług onion z użyciem autoryzacji klienta ("restricted-discovery"). Oprócz proxy SOCKS dodano wsparcie dla proxy HTTP z użyciem metody CONNECT. Zrealizowano adaptacyjne ustawianie timeoutów w zależności od obciążenia. Dodano eksperymentalne wsparcie dla tokio-console. Kontynuowane jest rozwijanie funkcjonalności dla relaying i serwerów dyrekcji (Directory Authority). Dodano polecenie "arti hsc ctor-migrate" do przenoszenia kluczy z klienta C do magazynu kluczy Arti. Dodano ustawienia do zarządzania uruchamianiem usług onion.

  • Opublikowano bazę danych RustDB, stworzoną w języku Rust, wzorując się na PostgreSQL. Obsługiwane są podstawowe operacje SQL (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), transakcje, MVCC, WAL (Write-Ahead Log), indeksy, połączenie przez protokół zgodny z PostgreSQL. Przy pisaniu RustDB wykorzystano AI.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster