Wydanie języka programowania Rust 1.54

Opublikowano wydanie systemowego języka programowania Rust 1.54, 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:

  • Dodano możliwość wykorzystania makr funkcyjnych wewnątrz atrybutów (makra proceduralne i makra utworzone za pomocą makra „macro_rules!”). Takie makra odróżniają się od funkcji symbolem „!” po nazwie (makro!(...)) i podstawiając tekst źródłowy makra zamiast generować wywołanie funkcji. Wywoływanie makr w atrybutach może być przydatne do dołączania treści z innych plików do komentarzy dokumentujących. Na przykład, aby wstawić zawartość pliku README i wynik wykonania skryptu, możesz podać: #![doc = include_str!("README.md")] #[ścieżka = concat!(env!("OUT_DIR "), "/generated.rs" )] wygenerowano mod;
  • Wbudowane funkcje kompilatora (Intrinsics) dla platformy wasm32 zostały ustabilizowane, umożliwiając wykorzystanie instrukcji SIMD w WebAssembly. Większość funkcji, takich jak v128_bitselect, jest dostępna w trybie „bezpiecznym”, ale niektóre funkcje działające ze wskaźnikami (na przykład v128_load) pozostają „niebezpieczne”.
  • Powróciło domyślne stosowanie kompilacji przyrostowej, która umożliwia odbudowanie tylko zmienionych części kodu, co może znacznie skrócić czas potrzebny na zbudowanie projektu podczas rekompilacji po wprowadzeniu drobnych zmian. Kompilacja przyrostowa została wyłączona w wersji 1.52.1 z powodu ukrytych błędów, które wyszły na jaw po dodaniu dodatkowej kontroli ładowania danych z pamięci podręcznej dysku.
  • Do kategorii stabilnej została przeniesiona nowa porcja API, w tym następujące stabilizowane:
      BTreeMap::into_keys
    • BTreeMap::into_values
    • HashMap::into_keys
    • HashMap::into_values
    • arch::wasm32
    • VecDeque::binary_search
    • VecDeque::binary_search_by
    • VecDeque::binary_search_by_key
    • VecDeque::punkt_partycji
  • Do cargo-tree dodano opcje: „—prune ” aby usunąć pakiet z wykresu zależności, „—głębia” aby wyświetlić w drzewie zależności tylko elementy danego poziomu zagnieżdżenia, „—edes no-proc- makro”, aby ukryć zależności makr proceduralnych.

Źródło: opennet.ru

Dodaj komentarz