Opublikowana została wersja języka programowania Rust 1.97, który został stworzony przez projekt Mozilla, a obecnie jest rozwijany pod egidą niezależnej organizacji non-profit Rust Foundation. Język koncentruje się na bezpiecznym zarządzaniu pamięcią i zapewnia narzędzia do osiągania wysokiego poziomu równoległości w wykonywaniu zadań, unikając jednocześnie użycia zbieracza śmieci oraz runtime (runtime sprowadza się do podstawowej inicjalizacji i obsługi 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:
- Domyślnie włączona jest nowa schemat dekorowania (mangling) nazw funkcji, globalnych zmiennych i struktur danych w generowanych plikach obiektowych i wykonywalnych (-Csymbol-mangling-version=v0). Nazwy są dekorowane, aby zapobiec konfliktom podczas linkowania różnych programów poprzez dołączenie specyficznego kontekstu, takiego jak ścieżka do modułu i nazwa pakietu crate.
Wcześniej stosowana schemat dekorowania nazw, oparty na Itanium ABI, miał takie wady, jak zastępowanie parametrów generycznych nieczytelnymi haszami oraz obecność części kompilatora, które nie używały Itanium ABI, co wymagało stosowania specyficznych dla Rust dekoderów nazw. W Rust 1.97 zastosowano domyślnie schemat dekorowania, opracowany specjalnie dla Rust, pozbawiony wspomnianych wad. Starą schemat planuje się usunąć w jednej z następnych wersji.
- W menedżerze pakietów cargo wbudowano możliwość zarządzania reakcją na generowanie ostrzeżeń przez kompilator podczas budowania. Dodano zmienną środowiskową CARGO_BUILD_WARNINGS, która może przyjmować trzy wartości: warn (domyślnie) — wyświetlanie ostrzeżenia na ekranie; allow — ukrywanie ostrzeżeń; deny — traktowanie ostrzeżeń jak błędów, co zatrzymuje budowanie.
W poprzednich wersjach, aby zakończyć budowę po wyświetleniu ostrzeżenia, należało podać „-Dwarnings” w RUSTFLAGS dla kompilatora, ale zmiana RUSTFLAGS sprawiała, że menedżer pakietów cargo uznaje budowanie za nowe, nie uwzględniając danych w pamięci podręcznej i całkowicie przebudowując cały projekt. Przeniesienie ustawienia na stronę cargo wykluczało reset pamięci podręcznej i konieczność pełnej recompilacji przy zmianie trybu obsługi ostrzeżeń, a także uprościło włączenie traktowania ostrzeżeń jako błędów w systemach ciągłej integracji.
- Domyślnie w konfiguracji włączone są komunikaty generowane przez linker. Komunikaty te wyświetlane są jako ostrzeżenia przez specjalną regułę lint «linker_messages», która nie należy do standardowej grupy «warnings». W tym momencie rustc filtruje komunikaty, które są typowymi fałszywymi alarmami lub normalnym zachowaniem, pozostawiając ostrzeżenia, które mogą wskazywać na problemy, takie jak ostrzeżenia o przestarzałych opcjach i niepożądanych ustawieniach. Wcześniej informacje od linkera były wyświetlane tylko w przypadku błędów, w przeciwnym razie wszystkie komunikaty były ukrywane. Aby przywrócić wcześniejsze zachowanie, w Cargo.toml można dodać: [lints.rust] linker_messages = «allow»
- Nowa porcja API została wprowadzona do stabilnej wersji, w tym ustabilizowane metody i implementacje traitów:
- Domyślnie dla RepeatN
- Kopiuj dla ffi::FromBytesUntilNulError
- Wyślij dla std::fs::File dla UEFI
- ::isolate_highest_one
- ::isolate_lowest_one
- ::highest_one
- ::lowest_one
- ::bit_width
- NonZero::isolate_highest_one
- NonZero::isolate_lowest_one
- NonZero::highest_one
- NonZero::lowest_one
- NonZero::bit_width
- Atrybut «const» używany jest w metodzie char::is_control.
Dodatkowo można zauważyć ostatnio ogłoszone projekty i wydarzenia związane z Rust:
- Projekt zinnia rozwija modułowe jądro podobne do Unix, napisane w języku Rust i dystrybuowane na licencji GPLv2. Jądro obsługuje interfejsy POSIX oraz kilka rozszerzeń z BSD i Linux, takich jak epoll i timerfd. Do rysowania i organizacji wejścia dostępne są sterowniki DRM (Direct Rendering Manager) i evdev. Zrealizowana funkcjonalność wystarcza, aby uruchomić środowisko graficzne Xfce w systemie X-server i kompozytowym serwera Weston opartym na Wayland. Obsługiwane jest uruchamianie zarówno w emulatorze QEMU, jak i na rzeczywistym sprzęcie, takim jak laptop ThinkPad E14 G7.
- Oto wydanie biblioteki komunikacyjnej iroh 1.0, umożliwiającej nawiązywanie połączeń sieciowych między aplikacjami na różnych hostach przy użyciu kluczy kryptograficznych zamiast adresów IP (określany jest klucz, do którego należy się połączyć, a iroh znajduje powiązany z nim host i nawiązuje zaszyfrowane połączenie z użyciem protokołu QUIC). Jeśli to możliwe, nawiązywane są bezpośrednie połączenia P2P, ale jeśli to niemożliwe, następuje przełączenie na korzystanie z relayów, które również służą do wykrywania hostów za pomocą kluczy. Możliwe jest uruchomienie własnego relay lub połączenie się z publicznymi relayami wspieranymi przez społeczność.
Wśród zaawansowanych możliwości: wsparcie dla Multipath QUIC w celu jednoczesnej dostawy pakietów wieloma ścieżkami, możliwość pracy z NAT, tryb statycznej konfiguracji do łączenia z lokalnymi urządzeniami bez dostępu do internetu, możliwość kompilacji do pośredniego kodu WASM do wykonania w przeglądarce, wsparcie dla tworzenia własnych transportów, na przykład do połączeń przez Bluetooth, WiFi Aware lub LoRa. Kod napisany jest w Rust i udostępniany na licencjach Apache-2.0 i MIT. Dostępne są opakowania dla Pythona, Node.js, Kotlin i Swift.
- Autor serwerowej platformy JavaScript Bun opublikował artykuł z analizą projektu przepisywania Buna z języka Zig na Rust z wykorzystaniem modelu AI Claude Fable. Zauważono, że Bun 1.3.14 będzie ostatnią wersją na Zig, a kolejna wersja Bun 1.4.0 już będzie na Rust. Z przeprowadzonych testów wynika, że wersja na Rust zużywa znacznie mniej pamięci i jest od 2 do 5% szybsza od wersji na Zig. Rozmiar pliku wykonywalnego w wersji na Rust zmniejszył się o 20%.
Źródło: opennet.ru
