Rdza 1.35

Zespół programistów Rusta ma przyjemność ogłosić nową wersję swojego języka: 1.35. Rust to język programowania, który pozwala pisać niezawodne i wydajne programy.

Jeśli masz już zainstalowany Rust poprzez rustup, możesz dokonać aktualizacji za pomocą polecenia:
Aktualizacja $ rustup stabilna

Najważniejszą rzeczą w aktualizacji jest wdrożenie cech zamknięcia Fn, FnOnce, FnMut dla Boxa ,Skrzynka ,Skrzynka odpowiednio. Dodanie możliwości rzucania domknięć na wskaźniki do niebezpiecznych funkcji, wywoływanie makra dbg!() jest teraz możliwe bez argumentów, a standardowa biblioteka została ustabilizowana.

Przejdź do szczegółów:

  • W nowej wersji dodaliśmy implementacje cech Fn, FnOnce, FnMut dla Boxa ,Skrzynka ,Skrzynka odpowiednio.
    Teraz ten kod będzie działać:
    fn foo(x: Pudełko u8>) -> Vek {
    vec![1, 2, 3, 4].into_iter().map(x).collect()
    }

    Możesz także wywołać zamknięcie bezpośrednio z Box :
    fn foo(x: Pudełko ) {
    X()
    }

  • Zamknięcia można teraz rzutować na wskaźniki do niebezpiecznego fn.
    Teraz ten kod jest ważny:
    /// Niezmienniki bezpieczeństwa to te, które zostały przekazane przez wskaźnik `unsafe fn`.
    niebezpieczne fn call_unsafe_fn_ptr(f: niebezpieczne fn()) {
    F()
    }

    fn główna() {
    // BEZPIECZEŃSTWO: Nie ma niezmienników.
    // Zamknięcie statycznie uniemożliwia wykonywanie niebezpiecznych czynności.
    niebezpieczny {
    call_unsafe_fn_ptr(|| {
    dbg!();
    });
    }
    }

  • Dodano możliwość wywołania makra dbg!() bez argumentów.
    Jeśli przekażesz jakieś wyrażenie do tego makra, makro wydrukuje jego wynik. Przykład:
    fn główna() {
    niech mut x = 0;

    jeśli dbg!(x == 1) {
    x += 1;
    }

    dbg!(x);
    }

    Po uruchomieniu tego kodu zobaczysz:
    [src/main.rs:4] x == 1 = fałsz
    [src/main.rs:8] x = 0

    Teraz możesz napisać tak:
    fn główna() {
    niech warunek = prawda;

    jeśli warunek {
    dbg!();
    }
    }

    Po uruchomieniu tego kodu zobaczysz:
    [src/main.rs:5]

  • Niektóre części biblioteki standardowej zostały ustabilizowane
    • Nowe metody dla f32 i f64:
      • f32::kopiuj
      • f64::kopiuj

      Właściwie funkcje kopiują znak innej liczby. Przykład:
      fn główna() {
      Assert_eq!(3.5_f32.copysign(-0.42), -3.5);
      }

    • Dodano nowe metody dla typów Range
      • Zakres::zawiera
      • ZakresOd::zawiera
      • ZakresDo::zawiera
      • ZakresInclusive::zawiera
      • RangeToInclusive::zawiera

      Za pomocą tych metod możesz łatwo sprawdzić, czy dana wartość znajduje się w sekwencji:
      fn główna() {
      jeśli (0..=10).zawiera(&5) {
      println!("Pięć to liczba od zera do dziesięciu.");
      }
      }

    • Pełną listę ustabilizowanych interfejsów API można znaleźć tutaj
  • W tej aktualizacji Clippy (jest to program, który sprawdza kod pod kątem wielu błędów) dodał nowe sprawdzenie drop_bounds. To sprawdzenie działa, gdy ustawisz ograniczenie: T: Drop - dla funkcji uogólnionych:
    fn foo (x:T){}

    Posiadanie ograniczenia T: Drop jest najczęściej błędem, ponieważ niektóre typy są natychmiast wykluczane, na przykład u8 (możesz przeczytać więcej na ten temat tutaj)

  • Dużo ulepszeń i poprawek w Cargo (menedżer pakietów językowych), pełna lista zmian

Źródło: linux.org.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster