Wydanie języka programowania Rust 1.67

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

Dodaj komentarz