Opublikowano wydanie języka programowania ogólnego przeznaczenia Rust 1.67, stworzonego w ramach projektu Mozilla, ale obecnie rozwijanego pod auspicjami niezależnej organizacji non-profit Rust Foundation. Język koncentruje się na bezpieczeństwie pamięci i zapewnia środki do osiągnięcia wysokiej równoległości zadań przy jednoczesnym uniknięciu korzystania z modułu wyrzucania elementów bezużytecznych i środowiska uruchomieniowego (czas działania jest ograniczony do podstawowej inicjalizacji i konserwacji standardowej biblioteki).
Metody obsługi pamięci Rust chronią programistę przed błędami podczas manipulowania wskaźnikami i chronią przed problemami wynikającymi z obsługi pamięci niskiego poziomu, takimi jak dostęp do obszaru pamięci po jego zwolnieniu, dereferencja pustych wskaźników, przepełnienie bufora itp. Aby dystrybuować biblioteki, dostarczać kompilacje i zarządzać zależnościami, projekt rozwija menedżera pakietów Cargo. Repozytorium crates.io jest obsługiwane w przypadku bibliotek hostingowych.
Bezpieczeństwo pamięci w Rust jest zapewnione w czasie kompilacji poprzez sprawdzanie referencji, śledzenie własności obiektów, śledzenie czasu życia obiektów (zakresów) i ocenę poprawności dostępu do pamięci podczas wykonywania kodu. Rust zapewnia również ochronę przed przepełnieniami liczb całkowitych, wymaga obowiązkowej inicjalizacji wartości zmiennych przed użyciem, lepiej radzi sobie z błędami w standardowej bibliotece, domyślnie stosuje koncepcję niezmiennych odniesień i zmiennych, oferuje silne typowanie statyczne w celu zminimalizowania błędów logicznych.
Główne innowacje:
- W przypadku funkcji asynchronicznych z Future::Output można teraz określić adnotacje „#[must_use]”, które zawierają ostrzeżenie w przypadku zignorowania zwracanej wartości, co pomaga zidentyfikować błędy spowodowane założeniem, że funkcja zmieni wartości zamiast zwracać nową wartość. #[must_use] asynchroniczny fn bar() -> u32 { 0 } asynchroniczny fn caller() { bar().await; } ostrzeżenie: niewykorzystane wyjście przyszłości zwrócone przez `bar`, które należy wykorzystać —> src/lib.rs:5:5 | 5 | bar().czekaj; | ^^^^^^^^^^^^ | = uwaga: `#[warn(unused_must_use)]` jest domyślnie włączone
- Zaktualizowano implementację kolejek FIFO std::sync::mpsc (wieloproducent, pojedynczy konsument), która została przełączona na korzystanie z modułu crossbeam-channel przy zachowaniu poprzedniego API. Nowe wdrożenie wyróżnia się rozwiązaniem szeregu problemów, wyższą wydajnością i uproszczoną obsługą kodu.
- Nowa część API została przeniesiona do kategorii stabilnej, w tym metody i implementacje cech zostały ustabilizowane:
- {liczba całkowita}::checked_ilog
- {liczba całkowita}::checked_ilog2
- {liczba całkowita}::checked_ilog10
- {liczba całkowita}::ilog
- {liczba całkowita}::ilog2
- {liczba całkowita}::ilog10
- NonZeroU*::ilog2
- NonZeroU*::ilog10
- NonZero*::BITY
- Atrybut „const”, który określa możliwość użycia go w dowolnym kontekście zamiast stałych, jest używany w funkcjach:
- znak::od_u32
- char::from_digit
- char::to_digit
- rdzeń::char::from_u32
- core::char::from_digit
- Zaimplementowano trzeci poziom obsługi Rusta w jądrze Linuksa (linuxkernel), a także dla Sony PlayStation 1 (mipsel-sony-psx), PowerPC z systemem AIX (powerpc64-ibm-aix), QNX Neutrino RTOS ( platformy aarch64-unknown-nto-) qnx710, x86_64-pc-nto-qnx710). Trzeci poziom obejmuje podstawowe wsparcie, ale bez automatycznych testów, publikowania oficjalnych kompilacji i sprawdzania, czy kod da się zbudować.
Dodatkowo można odnotować publikację przez firmę ARM łatek umożliwiających wykorzystanie języka Rust do tworzenia sterowników i modułów jądra Linuksa montowanych dla systemów opartych na architekturze AArch64.
Źródło: opennet.ru