Wersja języka programowania Rust 2021 (1.56)

Opublikowano wydanie systemowego języka programowania Rust 1.56, założonego przez projekt Mozilla, ale obecnie rozwijanego pod auspicjami niezależnej organizacji non-profit Rust Foundation. Oprócz zwykłego numeru wersji, wydanie nosi również oznaczenie Rust 2021 i oznacza stabilizację zmian zaproponowanych w ciągu ostatnich trzech lat. Rust 2021 będzie również podstawą do zwiększania funkcjonalności w ciągu najbliższych trzech lat, podobnie jak wydanie Rust 2018 stało się podstawą rozwoju języka w ciągu ostatnich trzech lat.

Aby zachować kompatybilność, programiści mogą używać w swoich programach etykiet „2015”, „2018” i „2021”, umożliwiając łączenie programów z fragmentami stanu języka odpowiadającymi wybranym wydaniom Rusta. Edycje zostały wprowadzone w celu oddzielenia niekompatybilnych zmian i są konfigurowane w metadanych przesyłek cargo poprzez pole „edycja” w sekcji „[pakiet]”. Przykładowo edycja „2018” zawiera funkcjonalność ustabilizowaną na koniec 2018 roku i obejmuje także wszystkie dalsze zmiany, które nie psują kompatybilności. Edycja 2021 zawiera dodatkowo funkcje przełamujące interoperacyjność zaproponowane w bieżącej wersji 1.56 i zatwierdzone do przyszłego wdrożenia. Oprócz samego języka redaktorzy biorą pod uwagę także stan narzędzi i dokumentacji.

Główne niezgodności zarejestrowane w Rust 2021:

  • Oddzielne przechwytywanie w zamknięciach — zamknięcia mogą teraz przechwytywać pojedyncze nazwy pól zamiast całego identyfikatora. Na przykład „|| ax + 1” przechwyci tylko „ax” zamiast „a”.
  • Cecha IntoIterator dla tablic: array.into_iter() umożliwia iterację po elementach tablicy według wartości, a nie odwołań.
  • Przetwarzanie wyrażeń „|” zostało zmienione w makro_rules (Boolean OR) we wzorcach — specyfikator „:pat” w dopasowaniach uwzględnia teraz „A | B".
  • Menedżer pakietów ładunków domyślnie zawiera drugą wersję narzędzia do rozpoznawania funkcji, którego obsługa pojawiła się w Rust 1.51.
  • Do standardowego modułu biblioteki prelude dodano cechy TryFrom, TryInto i FromIterator.
  • Makra panic!(..) i Assert!(expr, ..) teraz zawsze używają format_args!(..) do formatowania ciągów, podobnie jak println!().
  • Wyrażenia ident#, ident»..." i ident'...' są zastrzeżone w składni języka.
  • Przeniesiono ostrzeżenia bare_trait_objects i ellipsis_inclusive_range_patterns do błędów.

Nowości w Ruście 1.56:

  • W Cargo.toml w sekcji „[pakiet]” dodano pole rust-version, za pomocą którego można określić minimalną obsługiwaną wersję Rusta dla pakietu skrzyni. Jeżeli bieżąca wersja nie odpowiada podanemu parametrowi, Cargo przestanie działać i wyświetli się komunikat o błędzie.
  • Podczas dopasowywania wzorców przy użyciu wyrażeń „wiązanie @ wzór” dostępna jest obsługa określania dodatkowych powiązań (na przykład „let matrix @ Matrix { row_len, .. } = get_matrix();”).
  • Nowa część API została przeniesiona do kategorii stabilnej, w tym metody i implementacje cech zostały ustabilizowane:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::zmniejsz_do
    • Ciąg::zmniejsz_do
    • OsString::zmniejsz_do
    • PathBuf::shrink_to
    • BinaryHeap::zmniejsz_do
    • VecDeque::zmniejsz_do
    • HashMap::zmniejsz_do
    • HashSet::shrink_to
  • W funkcjach używany jest atrybut „const”, który określa możliwość użycia w dowolnym kontekście zamiast stałych
    • std::mem::transmutacja
    • [T]::pierwszy
    • [T]::split_first
    • [T]::ostatni
    • [T]::split_last
  • Kompilator został przełączony tak, aby korzystał z wersji LLVM 13.
  • Wdrożono drugi poziom obsługi dla platformy aarch64-apple-ios-sim oraz trzeci poziom dla platform powerpc-unknown-freebsd i riscv32imc-esp-espidf. Trzeci poziom obejmuje podstawowe wsparcie, ale bez automatycznych testów, publikowania oficjalnych kompilacji i sprawdzania, czy kod da się zbudować.

Przypomnijmy, że Rust koncentruje się na bezpieczeństwie pamięci, zapewnia automatyczne zarządzanie pamięcią i zapewnia środki do osiągnięcia dużej równoległości w wykonywaniu zadań bez użycia modułu zbierającego elementy bezużyteczne lub środowiska wykonawczego (czas działania jest zredukowany do podstawowej inicjalizacji i konserwacji standardowej biblioteki).

Automatyczne zarządzanie pamięcią Rusta eliminuje błędy podczas manipulowania wskaźnikami i chroni przed problemami wynikającymi z manipulacji pamięcią na niskim poziomie, takimi jak dostęp do obszaru pamięci po jego zwolnieniu, wyłuskiwanie wskaźników zerowych, przepełnienie bufora itp. Aby rozpowszechniać biblioteki, zapewniać montaż i zarządzać zależnościami, w ramach projektu opracowywany jest menedżer pakietów Cargo. Repozytorium crates.io jest obsługiwane w przypadku bibliotek hostujących.

Źródło: opennet.ru

Dodaj komentarz