Wydanie języka programowania Rust 1.34

Odbyła się wydanie języka programowania systemu Rdza 1.34, opracowany w ramach projektu Mozilla. 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.

Automatyczne zarządzanie pamięcią Rusta uwalnia programistę od manipulacji wskaźnikami i chroni przed problemami wynikającymi z manipulacji pamięcią na niskim poziomie, takimi jak dostęp do pamięci po zwolnieniu, wyłuskiwanie wskaźników zerowych, przepełnienie bufora i tym podobne. Trwają prace nad menedżerem pakietów, który umożliwi dystrybucję bibliotek, zapewnienie montażu i zarządzanie zależnościami w ramach projektu. Ładunek, co pozwala jednym kliknięciem pobrać biblioteki potrzebne do programu. Repozytorium jest obsługiwane w celu hostowania bibliotek skrzynie.io.

Głównym innowacje:

  • Menedżer pakietów Cargo dodał narzędzia do pracy z alternatywnymi rejestrami pakietów, które mogą współistnieć z publicznym rejestrem crates.io. Na przykład twórcy zastrzeżonych aplikacji mogą teraz korzystać z własnego prywatnego rejestru, którego można używać podczas tworzenia listy zależności w Cargo.toml i stosować model wersjonowania podobny do crates.io dla swoich produktów, a także odnosić zależności do obu skrzynek. io i do własnego rejestru.

    Aby dodać zewnętrzne rejestry do .cargo/config (znajdującego się w $HOME lub w katalogu pakietów)
    pod warunkiem, że sekcji „[rejestry]”, a aby skorzystać z rejestru zewnętrznego, w opisie każdej zależności w Cargo.toml pojawiła się opcja „rejestr”. Aby połączyć się z dodatkowym rejestrem wystarczy umieścić token uwierzytelniający w pliku ~/.cargo/credentials i uruchomić komendę
    „cargo login --registry=my-registry” i opublikowanie pakietu -
    "kargo opublikować -registry=moj-rejestr";

  • Dodano pełną obsługę użycia operatora „?”. w testach dokumenty, co pozwala na wykorzystanie przykładowego kodu z dokumentacji jako testów. Wcześniej operator
    „?” może być używany do obsługi błędów podczas wykonywania testu tylko w obecności funkcji „fn main()” lub w funkcjach „#[test]”;

  • W niestandardowych atrybutach zdefiniowanych za pomocą makr proceduralnych zabezpieczone możliwość wykorzystania dowolnych zestawów tokenów („#[attr($tokens)]”, „#[attr[$tokens]] i #[attr{$tokens}]”). Wcześniej elementy można było określać jedynie w formie drzewa/rekurencyjnej przy użyciu literałów łańcuchowych, na przykład „#[foo(bar, baz(quux, foo = „bar”))]”, ale teraz można używać wyliczeń (' #[range(0. .10)]') i konstrukcje takie jak „#[bound(T: MyTrait)]”;
  • Typy ustabilizowane (cecha) SpróbujOd и Spróbuj, umożliwiając konwersję typów z obsługą błędów. Na przykład metody takie jak from_be_bytes z typami całkowitymi wykorzystują tablice jako dane wejściowe, ale dane często są typu Slice, a ręczna konwersja między tablicami i wycinkami jest problematyczna. Dzięki nowym cechom określoną operację można wykonać w locie poprzez wywołanie .try_into(), na przykład „let num = u32::from_be_bytes(slice.try_into()?)”. Dla konwersji, które zawsze kończą się sukcesem (np. z typu u8 na u32), dodano typ błędu Nieomylny, umożliwiając przejrzyste użycie
    TryFrom dla wszystkich istniejących implementacji „From”;

  • Funkcja została uznana za przestarzałą CommandExt::before_exec, co umożliwiło wykonanie procedury obsługi przed uruchomieniem exec, które zostało wykonane w kontekście procesu potomnego rozwidlonego po wywołaniu fork(). W takich warunkach niektóre zasoby procesu nadrzędnego, takie jak deskryptory plików i mapowane obszary pamięci, mogą zostać zduplikowane, co może prowadzić do niezdefiniowanego zachowania i nieprawidłowego działania bibliotek.
    Zaleca się użycie niebezpiecznej funkcji zamiast before_exec CommandExt::pre_exec.

  • Stabilizowane atomowe typy całkowite ze znakiem i bez znaku o rozmiarze od 8 do 64 bitów (na przykład AtomowyU8), a także typy ze znakiem NieZeroI[8|16|32|64|128].
  • Nowa część interfejsu API została przeniesiona do kategorii stabilnej, w tym Any::type_id, Error::type_id, plasterek::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] i metody SystemTime zostały ustabilizowane ::checked_[add|sub]. Funkcje iter::from_fn i iter::successors zostały ustabilizowane;
  • Dla wszystkich typów całkowitych zaimplementowane są metody check_pow, saturating_pow, wrapping_pow i overflowing_pow;
  • Dodano możliwość włączenia optymalizacji na etapie łączenia poprzez określenie opcji kompilacji „-C linker-plugin-lto”.

Źródło: opennet.ru

Dodaj komentarz