Wydanie języka programowania Rust 1.36

opublikowany wydanie języka programowania systemu Rdza 1.36, założona przez projekt 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:

  • Cecha ustabilizowana Przyszłość, która reprezentuje wartość, której ocena może nie zostać jeszcze ukończona podczas korzystania z bloków async / .await. Wartości asynchroniczne zdefiniowane za pomocą Future umożliwiają kontynuowanie wykonywania użytecznej pracy w wątku, jednocześnie oczekując na zakończenie obliczeń określonej wartości;
  • Biblioteka ustabilizowana przydzielić, który zapewnia inteligentne wskaźniki i kolekcje do zarządzania wartościami przydzielonymi do pamięci. Alokacja pamięci w std używa teraz typu Rzecz, które są reeksportowane z alloc. Oddzielne użycie alloc ma sens w aplikacjach niezwiązanych ze std („#![no_std]”), a także w bibliotekach przeznaczonych do użytku w podobnych programach bez std;
  • Aby ominąć sprawdzanie prawidłowej inicjalizacji wartości proponowane typ pośredni Może Jednostka, którego można użyć zamiast funkcji mem::uninitialized jako bezpieczniejszą alternatywę. Funkcja mem::uninitialized jest wygodna do szybkiego tworzenia tablic, ale wprowadza w błąd kompilator, ponieważ wydaje się, że została zainicjowana, ale w rzeczywistości wartość pozostaje niezainicjowana. MaybeUninit pozwala jawnie wskazać kompilatorowi, że wartość jest niezainicjowana, wziąć pod uwagę możliwe niezdefiniowane zachowanie z tym związane, a także zorganizować kontrole w programach poprzez „może_t:” i inicjalizację krok po kroku, zaznaczając jej zakończenie za pomocą wywołania „.assume_init()”. Wraz z pojawieniem się MaybeUninit funkcja mem::uninitialized stała się przestarzała i nie zaleca się jej używania;
  • Dla języka Rust 2015 ustabilizowano technikę NLL (Non-Lexical Lifetimes), która rozszerzyła system rejestracji czasu życia pożyczonych zmiennych (początkowo NLL był obsługiwany tylko przez Rust 2018). Zamiast zatwierdzać okresy istnienia na poziomie leksykalnym, NLL robi to na poziomie zestawu wskaźników na wykresie przepływu wykonania. Takie podejście pozwala na podniesienie jakości sprawdzania zapożyczeń zmiennych (borrow checker) i umożliwia wykonanie pewnego rodzaju poprawnego kodu, którego użycie wcześniej doprowadziło do błędu. Nowe zachowanie znacznie ułatwia także debugowanie;
  • Uwzględniono nową implementację tablic asocjacyjnych HashMapa, w oparciu o zastosowanie konstrukcji Szwajcarski stół (automatycznie ładowany hashbrown::HashMap, chyba że wyraźnie określono inaczej, na przykład std::HashMap, który jest oparty na SipHash 1-3). Interfejs oprogramowania pozostaje taki sam, a zauważalne dla dewelopera różnice sprowadzają się do zwiększonej wydajności i zmniejszonego zużycia pamięci;
  • W menedżerze pakietów cargo dodany opcję „--offline”, która umożliwia pracę bez dostępu do sieci, w której podczas instalowania zależności wykorzystywane są wyłącznie pakiety buforowane w systemie lokalnym. Jeśli zależności nie ma w lokalnej pamięci podręcznej, zostanie zgłoszony błąd. Aby wstępnie załadować zależności do lokalnej pamięci podręcznej przed przejściem w tryb offline, możesz użyć polecenia „cargo fetch”;
  • Zaimplementowano możliwość wywoływania makra „dbg!” wskazanie kilku argumentów;
  • W przypadku metod używany jest atrybut „const”, który określa możliwość użycia w dowolnym kontekście zamiast stałych
    Układ::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::wiszące i
    NonNull::obsada;

  • Do kategorii stabilnej przeniesiono nową część API, obejmującą metody, które zostały ustabilizowane
    task::Waker, task::Poll,
    VecDeque::obróć_w lewo, VecDeque::obróć_w prawo,
    Czytaj::read_vectored, Zapis::write_vectored,
    Iterator::skopiowany,
    BorrowMut (dla ciągów znaków) i str::as_mut_ptr.

Źródło: opennet.ru

Dodaj komentarz