Wydanie języka programowania Rust 1.68

Opublikowano wydanie języka programowania ogólnego przeznaczenia Rust 1.68, 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 i repozytorium crates.io ustabilizowały obsługę protokołu Sparse, który definiuje nowy sposób pracy z indeksem odzwierciedlającym dostępne wersje wszystkich pakietów istniejących w repozytorium. Nowy protokół pozwala znacznie zwiększyć szybkość pracy z crates.io i rozwiązać problemy ze skalowaniem wraz z dalszym wzrostem liczby pakietów w repozytorium.

    Aby zmniejszyć opóźnienia spowodowane pobraniem pełnego indeksu, Sparse zamiast uzyskiwać dostęp do indeksu za pomocą Git, polega na bezpośrednim pobieraniu przez HTTPS tylko niezbędnych danych indeksu, obejmujących zależności konkretnego projektu. Do dostarczania danych indeksowych wykorzystywana jest nowa usługa, Index.crates.io. Domyślnie nowy protokół planowany jest do użycia w gałęzi Rust 1.70, a wcześniej, aby go włączyć, można ustawić zmienną środowiskową „CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse” lub dodać parametr „protocol =” do pliku „[registries. crates-io]” w sekcji „sparse” pliku .cargo/config.toml.

  • Dodano makro „pin!”, które pozwala na utworzenie struktury Pin<&mut T> z wyrażenia „T” z lokalnym przypinaniem jej stanu (w odróżnieniu od Box::pin, nie alokuje pamięci na stercie, lecz wiąże na poziomie stosu).
  • Zaproponowano domyślną procedurę obsługi błędów alokacji pamięci, używaną podczas korzystania ze standardowego pakietu alloc. Aplikacje, które umożliwiają tylko alloc (bez std), będą teraz wywoływać procedurę obsługi „panic!”, gdy alokacja pamięci się nie powiedzie, co opcjonalnie można przechwycić za pomocą „#[panic_handler]”. Programy korzystające z biblioteki std będą nadal wypisywać informacje o błędach na stderr i zawieszać się.
  • Nowa część API została przeniesiona do kategorii stabilnej, w tym metody i implementacje cech zostały ustabilizowane:
    • {core,std}::pin::pin!
    • impl Od dla {f32,f64}
    • std::path::MAIN_SEPARATOR_STR
    • impl DerefMut dla PathBuf
  • Atrybut „const”, który określa możliwość użycia go w dowolnym kontekście zamiast stałych, wykorzystywany jest w funkcji VecDeque::new.
  • Do pracy na platformie Android wymagany jest teraz co najmniej NDK r25 (API 19), tj. Minimalna obsługiwana wersja Androida została podniesiona do 4.4 (KitKat).
  • Dla platformy Sony PlayStation Vita zaimplementowano trzeci poziom wsparcia (armv7-sony-vita-newlibeabihf). Trzeci poziom obejmuje podstawowe wsparcie, ale bez automatycznych testów, publikowania oficjalnych kompilacji i sprawdzania, czy kod da się zbudować.

Źródło: opennet.ru

Dodaj komentarz