Wydanie języka programowania Rust 1.44

opublikowany wydanie języka programowania systemu Rdza 1.44, założona przez projekt Mozilla. Język koncentruje się na bezpieczeństwie pamięci, zapewnia automatyczne zarządzanie pamięcią i zapewnia narzędzia umożliwiające osiągnięcie dużej równoległości zadań bez użycia modułu zbierającego elementy bezużyteczne Czas.

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. 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.

W tekście zapowiedzi nowego wydania twórcy Rusta wdali się w politykę i stanowczo odmówili opublikowania pełnej recenzji zmian w Rust 1.44 na znak solidarności z protestującymi przeciwko przemocy policji, wskazując, że ta kwestia jest ważniejsza niż wymiana wiedzy technicznej. Podstawowy innowacje:

  • Menedżer pakietów Cargo integruje polecenie „drzewo ładunków”, które wyświetla wykres zależności w formie drzewa. Dodana została także opcja „—duplikaty” („drzewo ładunku -d”), która umożliwia ocenę zależności w różnych wersjach tego samego pakietu.

    mdbook v0.3.2 (/Users/src/rust/mdbook)
    ├── amoniak v3.0.0
    │ ├── HTML5ever v0.24.0
    │ │ ├── log v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── znaczniki5ever v0.9.0
    │ │ ├── log v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── siphasher v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [zależności kompilacji] │ │ │ └── kontrola_wersji v0.1.5
    ...

  • W przypadku aplikacji, które nie są powiązane ze standardem („#![no_std]”), obsługa technik programowania asynchronicznego jest realizowana w oparciu o funkcję „async”, blok async move { ... } i operator „.await”, który uprościć pisanie głównego przepływu poleceń nieblokujących procedur obsługi.
  • Do parsera dodano obsługę schematu definicji rozszerzalnej hierarchii modułów. Na przykład poniższa konstrukcja nie spowoduje błędu pomimo faktycznego braku modułu „foo/bar/baz.rs” (konstrukcja jest nadal semantycznie niepoprawna i może powodować błąd, ale zmiany można zobaczyć i przeanalizować pod adresem poziom kompilacji makro i warunkowej):

    #[cfg(FAŁSZ)] mod foo {
    pasek modów {
    baza modów;
    }
    }

  • Kompilator rustc dodał możliwość używania flagi „-C codegen-units” w trybie przyrostowym. Implementacja catch_unwind została przerobiona tak, aby nie miała wpływu na wydajność, jeśli proces rozwijania zostanie wyłączony i nie zostaną zgłoszone żadne wyjątki.
  • Zapewniono obsługę poziomu 64 dla platform aarch64-unknown-none, aarch64-unknown-none-softfloat, arm86-apple-tvos i x64_XNUMX-apple-tvos. Trzeci poziom obejmuje podstawowe wsparcie, ale bez automatycznych testów i publikacji oficjalnych wersji.
  • Nowa porcja API została przeniesiona do kategorii stabilnej, w tym stabilizowanej
    PathBuf::with_capacity,
    PathBuf::pojemność,
    PathBuf::wyczyść,
    PathBuf::rezerwa,
    PathBuf::reserve_exact,
    PathBuf::shrink_to_fit,
    {f32|f64}::to_int_unchecked,
    Układ::align_to,
    Układ::pad_to_align,
    Układ::tablica i
    Układ::rozszerz.

  • Rozszerzone funkcje biblioteki standardowej:
    • Dodano specjalny wariant „vec![]”, który jest bezpośrednio odzwierciedlony w Vec::new(), umożliwiając użycie „vec![]” w kontekście zamiast stałych.
    • Dodano implementację (impl) cechy do konwersji::Infallible Haszysz.
    • OsString implementuje inteligentne wskaźniki DerefMut и Indeks Mut, zwracając „&mut OsStr”.
    • Dodano obsługę Unicode 13.
    • Zaimplementowane w String Od<&mut str>.
    • IoSlice implementuje tę cechę Skopiuj.
    • Vek zaimplementowano Od<[T; N]>.
    • proc_macro::LexError implementuje fmt::Display i Error.
  • Atrybut „const”, który określa możliwość użycia go w dowolnym kontekście zamiast stałych, jest stosowany w metodach from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes i to_ne_bytes dla wszystkich typów całkowitych.
  • Dodano obsługę generowania bibliotek statycznych w formacie „.a” zamiast „.lib” dla platform GNU w systemie Windows.
  • Minimalne wymagania dla LLVM zostały podniesione do wersji LLVM 8.

Źródło: opennet.ru

Dodaj komentarz