Wydanie języka programowania Rust 1.62

Opublikowano wydanie języka programowania ogólnego przeznaczenia Rust 1.62, 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:

  • Menedżer pakietów „cargo” oferuje polecenie „add”, które umożliwia dodanie nowych zależności do manifestu Cargo.toml lub zmianę istniejących zależności z wiersza poleceń. Polecenie umożliwia także określenie poszczególnych cech i wersji, np. cargo add serde —features wyprowadź cargo add nom@5
  • Dodano możliwość użycia „#[derive(Default)]” z wyliczeniami, w których opcja domyślna jest zdefiniowana za pomocą atrybutu „#[default]”. #[derive(Default)] wyliczenie Może { #[domyślne] Nic, Coś(T), }
  • Na platformie Linux zastosowano bardziej zwartą i szybszą implementację mechanizmu synchronizacji Mutex, bazującą na wykorzystaniu futeksów dostarczanych przez jądro Linuksa. W przeciwieństwie do wcześniej stosowanej implementacji opartej na bibliotece pthreads, nowa wersja do przechowywania stanu Mutex wykorzystuje tylko 5 bajtów zamiast 40. Podobnie mechanizmy blokujące Condvar i RwLock zostały przeniesione do futex.
  • Zaimplementowano drugi poziom obsługi platformy docelowej x86_64-unknown-none, mający na celu generowanie plików wykonywalnych, które mogą działać bez systemu operacyjnego. Na przykład określona platforma docelowa może zostać użyta podczas pisania komponentów jądra. Drugi poziom wsparcia obejmuje gwarancję montażu.
  • Trzeci poziom wsparcia został zaimplementowany dla platform aarch64-pc-windows-gnullvm i x86_64-pc-windows-gnullvm. Trzeci poziom obejmuje podstawowe wsparcie, ale bez automatycznych testów, publikowania oficjalnych kompilacji i sprawdzania, czy kod da się zbudować.
  • Nowa część API została przeniesiona do kategorii stabilnej, w tym metody i implementacje cech zostały ustabilizowane:
    • bool::then_some
    • f32::total_cmp
    • f64::total_cmp
    • Stdin::linie
    • Windows::CommandExt::raw_arg
    • impl wartość domyślna dla AssertUnwindSafe
    • Z > dla Rc
    • Z > dla Arc<[u8]>
    • FusedIterator dla EncodeWide

    Źródło: opennet.ru

Dodaj komentarz