Opublikowano wersję języka programowania Rust 1.90, opracowanego przez projekt Mozilla, a obecnie rozwijanego pod egidą niezależnej organizacji non-profit Rust Foundation. Język koncentruje się na bezpiecznym zarządzaniu pamięcią i oferuje narzędzia do osiągania wysokiego poziomu równoległości w wykonywaniu zadań, omijając przy tym konieczność korzystania z garbage collectora i runtime (runtime ogranicza się do podstawowej inicjalizacji i wsparcia 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:
- W systemie Linux na komputerach z architekturą x86_64, do dynamicznego linkowania pakietów crate domyślnie używany jest linker LLD z projektu LLVM. Zastosowanie LLD w porównaniu do linkera BFD przyniosło poprawę wydajności linkowania dużych plików wykonywalnych oraz projektów z obszernymi informacjami debugowania, a także przyspieszyło inkrementalne ponowne budowanie. W większości przypadków LLD jest zgodny z BFD. W przypadku wystąpienia problemów można powrócić do BFD, ustawiając w zmiennej środowiskowej RUSTFLAGS flagę „-C linker-features=-lld” lub dodając do pliku konfiguracyjnego .cargo/config.toml: [target.x86_64-unknown-linux-gnu] rustflags = [„-C linker-features=-lld”]
- W menedżerze pakietów cargo w poleceniu „publish” wprowadzono opcję „—workspace”, która umożliwia automatyczne publikowanie wszystkich pakietów z wybranego obszaru roboczego (zestawu pakietów korzystających z jednego pliku Cargo.lock i wspólnego katalogu wyników budowy), zachowując kolejność pakietów i uwzględniając między nimi zależności.
- Nowa porcja API została wprowadzona do stabilnej wersji, w tym ustabilizowane metody i implementacje traitów:
- u{n}::checked_sub_signed
- u{n}::overflowing_sub_signed
- u{n}::saturating_sub_signed
- u{n}::wrapping_sub_signed
- impl Copy for IntErrorKind
- impl Hash for IntErrorKind
- impl PartialEq for CStr
- impl PartialEq for CStr
- impl PartialEq<Cow> for CStr
- impl PartialEq for CString
- impl PartialEq for CString
- impl PartialEq<Cow> for CString
- impl PartialEq for Cow
- impl PartialEq for Cow
- impl PartialEq for Cow
- Wskaźnik „const” zastosowany w funkcjach:
- ::reverse
- f32::floor
- f32::ceil
- f32::trunc
- f32::fract
- f32::round
- f32::round_ties_even
- f64::floor
- f64::ceil
- f64::trunc
- f64::fract
- f64::round
- f64::round_ties_even
- Dla docelowych platform opartych na bibliotece Musl, znajdujących się na trzecim poziomie wsparcia, domyślnie włączono dynamiczne linkowanie: mips64-unknown-linux-muslabi64, powerpc64-unknown-linux-musl, powerpc-unknown-linux-musl, powerpc-unknown-linux-muslspe, riscv32gc-unknown-linux-musl, s390x-unknown-linux-musl oraz thumbv7neon-unknown-linux-musleabihf.
- Platforma docelowa „x86_64-apple-darwin” została przeniesiona z pierwszego poziomu wsparcia na drugi (Apple planuje zakończyć wsparcie dla architektury x86_64). Pierwszy poziom wsparcia oznacza tworzenie binarnych zestawów, przeprowadzanie szczegółowych testów oraz zapewnienie najwyższego poziomu wsparcia dla platformy — każda zmiana w kompilatorze jest testowana za pomocą pełnego zestawu testów. Drugi poziom wsparcia oznacza gwarancję kompilacji, ale brak gwarancji przy przechodzeniu zestawu testów.
Dodatkowo należy zauważyć rozwój przez firmę Microsoft narzędzi do tworzenia sterowników Windows w języku Rust. Na GitHubie już opublikowano zestaw pakietów crate do tworzenia sterowników opartych na WDM (Windows Driver Kit), KMDF (Kernel-Mode Driver Framework) i UMDF (User-Mode Driver Framework), a także usług Win32, które nadają się do użycia w Windows 11. Celem projektu jest dostarczenie dla programistów w języku Rust bibliotek i funkcji, podobnych do tych, które są oferowane w narzędziu WDK dla programistów sterowników w języku C. Na obecnym etapie narzędzie do tworzenia sterowników w Rust wykorzystuje dużą liczbę wywołań unsafe podczas interakcji z podsystemami Windows, ale w przyszłości planowane jest przygotowanie bezpiecznych abstrakcji dla struktur jądra i DDI (Device Driver Interface). Prace projektu są rozpowszechniane na licencjach MIT i Apache 2.0.
Źródło: opennet.ru
