Wydanie języka programowania Rust 1.39

opublikowany wydanie języka programowania systemu Rdza 1.39, 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:

  • Stabilizowany nowa składnia programowania asynchronicznego oparta na funkcji „async”, bloku async move { ... } i operatorze „.await”, co ułatwia pisanie procedur obsługi, które nie blokują głównego przepływu poleceń. W porównaniu z wcześniej oferowanym interfejsem API dla asynchronicznych operacji we/wy, konstrukcje async/.await są proste do zrozumienia, wysoce czytelne i umożliwiają implementację złożonych interakcji asynchronicznych przy użyciu znanych technik kontroli przepływu opartych na pętlach, instrukcjach warunkowych i wyjątkach.

    Składnia Async-await umożliwia tworzenie funkcji, które mogą wstrzymać ich wykonywanie, przywrócić kontrolę do głównego wątku, a następnie wznowić wykonywanie od miejsca, w którym zostały przerwane. Taka przerwa jest wymagana na przykład podczas przetwarzania operacji wejścia/wyjścia, podczas którego można wykonać inną pracę w oczekiwaniu na przybycie kolejnej porcji danych. Funkcje i bloki zdefiniowane za pomocą „async fn” i „async move” zwracają cechę Przyszłość, który definiuje odroczoną reprezentację obliczeń asynchronicznych. Możesz bezpośrednio zainicjować odroczone obliczenia i uzyskać wynik za pomocą operatora „.await”. Żadna akcja nie jest wykonywana ani wcześniej planowana, dopóki nie zostanie wywołana funkcja .await, co pozwala na tworzenie złożonych konstrukcji zagnieżdżonych bez dodatkowego obciążenia.

    async fn pierwsza_funkcja() -> u32 { .. }
    ...
    niech przyszłość = pierwsza_funkcja();
    ...
    niech wynik: u32 = przyszłość.czekaj;

  • Stabilizowany „#![feature(bind_by_move_pattern_guards)]”, zezwalający na użycie zmiennych z typem powiązania „przez ruch" w szablonach i używaj odniesień do tych zmiennych w sekcji "if" wyrażenia "mecz„. Na przykład dozwolone są teraz następujące konstrukcje:

    fn główna() {
    niech tablica: Pudełko<[u8; 4]> = Pole::nowy([1, 2, 3, 4]);

    dopasuj tablicę {
    nums
    jeśli nums.iter().sum::() == 10

    => {
    upuść(liczby);
    }
    _ => nieosiągalny!(),
    }
    }

  • Wskazanie dozwolone atrybuty podczas definiowania parametrów funkcji, domknięć i wskaźników funkcji. Obsługiwane są atrybuty kompilacji warunkowej (cfg, cfg_attr), które kontrolują diagnostykę poprzez lint (zezwól, ostrzegaj, odmów i zabraniaj) oraz atrybuty pomocniczych wywołań makr.

    fn Len(
    #[cfg(windows)] plasterek: &[u16], // użyj parametru w systemie Windows
    #[cfg(not(windows))] plasterek: &[u8], // użyj w innym systemie operacyjnym
    ) -> użyj {
    plasterek.len()
    }

  • Ostrzeżenia o problemach zidentyfikowanych podczas sprawdzania zapożyczeń zmiennych (borrow checker) z wykorzystaniem techniki NLL (Non-Lexical Lifetimes), przetłumaczony do kategorii błędów krytycznych. Przypomnijmy, że system weryfikacji oparty na nowym mechanizmie uwzględniania czasu życia pożyczonych zmiennych pozwolił zidentyfikować pewne problemy, które przeszły niezauważone przez stary kod weryfikacyjny. Ponieważ wyniki błędów takich kontroli mogą mieć wpływ na zgodność z wcześniej działającym kodem, zamiast błędów początkowo wyświetlano ostrzeżenia. Ostrzeżenia zostały teraz zastąpione błędami podczas działania w trybie Rust 2018. W następnej wersji wyjście błędów zostanie również zaimplementowane w trybie Rust 2015, co ostatecznie pozbędzie się starego modułu sprawdzania pożyczek;
  • Atrybut „const”, który określa możliwość użycia w dowolnym kontekście zamiast stałych, wykorzystywany jest w funkcjach Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, zawijanie_abs i przepełnienie_abs;

  • Do kategorii stabilnej przeniesiono nową część API, obejmującą metody, które zostały ustabilizowane
    Pin::into_inner, Instant::checked_duration_since i Instant::saturating_duration_since;

  • Menedżer przesyłek ładunkowych ma teraz możliwość korzystania z rozszerzenia „.toml” dla plików konfiguracyjnych. Dodano wstępne wsparcie dla budowania standardowej biblioteki bezpośrednio z Cargo. Dodano flagę „--workspace”, zastępując kontrowersyjną flagę „--all”. Do metadanych dodano nowe pole „publikować„, który umożliwia publikowanie zależności poprzez określenie tagu git i numeru wersji. Dodano opcję testową „-Ztimings”, aby wygenerować raport HTML dotyczący czasów wykonania różnych etapów kompilacji.
  • W kompilatorze rustc komunikaty diagnostyczne obejmują przycięcie końcówek kodu, które nie mieszczą się w terminalu. Zapewniony trzeci poziom wsparcia dla platform docelowych
    i686-unknown-uefi i sparc64-unknown-openbsd. Trzeci poziom obejmuje podstawowe wsparcie, ale bez automatycznych testów i publikacji oficjalnych wersji.

Źródło: opennet.ru

Dodaj komentarz