Opublikowano wydanie systemowego języka programowania Rust 1.52, założonego przez projekt Mozilla, ale obecnie rozwijanego pod auspicjami niezależnej organizacji non-profit Rust Foundation. Język 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 zadań bez użycia modułu zbierającego elementy bezużyteczne lub środowiska wykonawczego (czas działania jest zredukowany do podstawowej inicjalizacji i konserwacji biblioteki standardowej).
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.
Główne innowacje:
- Usunięto powiązanie z kolejnością wykonywania poleceń „sprawdzenie ładunku” i „obcięcie ładunku”. Poprzednio wywołanie „cargo Clippy” po „cargo check” nie uruchamiało narzędzia Clippy (Linter) ze względu na brak separacji pamięci podręcznej dla tych trybów sprawdzania. Teraz problem ten został rozwiązany i kolejność wywoływania „cargo Clippy” i „cargo check” nie ma już znaczenia.
- Nowa część API została przeniesiona do kategorii stabilnej, w tym ustabilizowano następujące metody:
- Argumenty::as_str
- znak::MAX
- znak::REPLACEMENT_CHARACTER
- char::UNICODE_VERSION
- char::decode_utf16
- char::from_digit
- char::from_u32_unchecked
- znak::od_u32
- plasterek::punkt_partycji
- str::rsplit_once
- str::split_once
- Atrybut „const”, który określa możliwość użycia go w dowolnym kontekście zamiast stałych, wykorzystywany jest w metodach:
- char::len_utf8
- char::len_utf16
- char::to_ascii_uppercase
- char::to_ascii_lowercase
- char::eq_ignore_ascii_case
- u8::to_ascii_uppercase
- u8::to_ascii_małe litery
- u8::eq_ignore_ascii_case
- Dodano sprawdzanie lint unsafe_op_in_unsafe_fn w celu ustalenia, czy niebezpieczny kod używany w niebezpiecznych funkcjach jest otoczony niebezpiecznymi blokami.
- Dozwolone jest rzutowanie zmiennych wskaźników na tablice w postaci wskaźników na typ elementu tablicy. niech mut x: [użyj; 2] = [0, 0]; niech p = &mut x as *mut use; niech p = &mut x as *const use;
- Do Clippy (Linter) dodano 9 nowych kontroli.
- Menedżer pakietów cargo obsługuje teraz pole „manifest_path” w formacie JSON dla paczek. Dodano obsługę podawania informacji licencyjnych w formacie SPDX 3.11 do repozytorium crates.io.
- Dopuszczalne jest określenie wielu filtrów podczas uruchamiania testów, na przykład uruchomienie „cargo test - foo bar” spowoduje uruchomienie wszystkich testów pasujących do masek „foo” i „bar”.
- Domyślny zestaw narzędzi LLVM został zaktualizowany do LLVM 12.
- Trzeci poziom wsparcia został wdrożony dla platform s390x-unknown-linux-musl, riscv32gc-unknown-linux-musl, riscv64gc-unknown-linux-musl i powerpc-unknown-openbsd. 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