Rdza 1.96.0

Wydanie zostało opublikowane Rdza 1.96.0 — najnowsza stabilna wersja języka programowania Rust. Aktualizacja została wydana. 28 maja roku 2026Można go zainstalować za pomocą standardowego polecenia rustup update stable. Główne zmiany obejmują nowe typy zakresów w core::range, stabilizację makr dopasowujących wzorce, usprawnienie działania kompilacji WebAssembly oraz poprawki dwóch luk w zabezpieczeniach Cargo.

Główne zmiany

  • Nowe typy zakresów core::range::Range*.
    Nowe typy zakresów zostały ustabilizowane w bibliotece standardowej: core::range::Range, RangeFrom, RangeInclusive i powiązane z nimi iteratory. W przeciwieństwie do starych typów z core::ops, nowe zakresy nie implementują bezpośrednio Iteratora, lecz są konwertowane na iterator za pomocą IntoIterator. Dzięki temu zakresy te można kopiować, co jest wygodne na przykład podczas przechowywania zakresu jako pola struktury. Składnia taka jak 0..1 obecnie tworzy stare typy zakresów, ale planowane jest jej przeniesienie do nowych typów w przyszłej wersji języka.

  • Dodano assert_matches! i debug_assert_matches!.
    Nowe makra pozwalają sprawdzić, czy wartość pasuje do danego wzorca. Koncepcja jest podobna do assert!(matches!(…)), ale w przypadku błędu wyświetlana jest reprezentacja debugowania wartości, co upraszcza diagnostykę. Te makra nie zostały dodane do Prelude, aby uniknąć konfliktów z popularnymi skrzyniami innych firm, dlatego muszą być jawnie importowane z core lub std.

  • Zmieniono zachowanie celów WebAssembly.
    Rust nie przekazuje już parametru --allow-undefined do linkera w kompilacjach WebAssembly. Niezdefiniowane symbole są teraz traktowane jako błędy podczas linkowania, zamiast być automatycznie konwertowane na importy z modułu „env”. Powinno to szybciej wychwycić błędy kompilacji i nieprawidłowe nazwy symboli. W razie potrzeby można przywrócić poprzednie zachowanie, używając RUSTFLAGS=-Clink-arg=--allow-undefined lub jawnie określając importowany moduł wasm za pomocą #[link(wasm_import_module = "env")].

  • W Cargo wprowadzono poprawki zabezpieczeń.
    Rust 1.96.0 naprawia dwie luki w zabezpieczeniach, które wpływają na użytkowników rejestrów zewnętrznych. CVE-2026-5223 W odniesieniu do obsługi dowiązań symbolicznych w plikach tarball skrzynek: złośliwy pakiet z rejestru innej firmy może nadpisać pamięć podręczną innego pakietu z tego samego rejestru. Od Rust 1.96.0 Cargo odrzuca archiwa skrzynek zawierające dowiązania symboliczne. CVE-2026-5222 Ten problem dotyczy normalizacji adresów URL w rejestrze rozrzedzonym i w rzadkich przypadkach może skutkować wysłaniem tokena Cargo do złośliwego rejestru. Według zespołu Rust, użytkownicy crates.io nie są dotknięci tymi problemami.

  • Zmiany językowe.
    W skład wydania wchodzą: Kilka drobnych poprawek i udoskonaleń: umożliwiono przekazywanie metazmiennych expr makr do cfg, poprawiono rzutowanie typu never-type w wyrażeniach krotek, naprawiono rzadkie przypadki nieprawidłowych wskazówek wnioskowania typu dla argumentów funkcji, dodano obsługę rejestrów wektorowych s390x w asemblerze wbudowanym oraz ponownie zezwolono na stałe ManuallyDrop jako szablony — naprawia to regresję wprowadzoną w Rust 1.94.0.

  • Zmiany w kompilatorze i platformach.
    dla LinuxWłączono obsługę rozluźnienia połączeń dla celów LoongArch – optymalizację połączeń, która upraszcza niektóre przejścia i wywołania po wdrożeniu kodu. W przypadku riscv64gc-unknown-fuchsia, konfiguracja bazowa została zaktualizowana do profilu RVA22 z obsługą rozszerzeń wektorowych.

  • Aktualizacje biblioteki standardowej.
    Dodano obsługę iteracji po zakresach liczb całkowitych innych niż zero. Naprawiono również leniwe przetwarzanie adresów hosta w SGX za pośrednictwem ToSocketAddr, a w dokumentacji i kontraktach wewnętrznych doprecyzowano definicję pamięci „do odczytu/zapisu”: wskaźnik zerowy został usunięty z ogólnej definicji, a wyjątki są teraz określane osobno dla poszczególnych metod.

  • Ustabilizowane API.
    Wśród ustabilizowanych interfejsów znajdują się assert_matches!, debug_assert_matches!, implementacje From dla AssertUnwindSafe , LazyCell i LazyLock oraz nowe typy zakresów i iteratory z core::range, w tym Range, RangeFrom, RangeToInclusive i ich iteratory.

  • Ładunek: Zmiany w zależnościach i dokumentacji.
    Zależność może teraz określać zarówno repozytorium Git, jak i alternatywny rejestr: wersja Git będzie używana lokalnie, a wersja rejestru będzie używana podczas publikowania, podobnie jak w przypadku crates.io. Dodano również obsługę flag target.'cfg(..)'.rustdoc w konfiguracji Cargo.

  • Rustdoc teraz dokładniej obsługuje dokumentację.
    Przestarzałe notatki API są teraz renderowane jako zwykła dokumentacja, bez wcześniejszego specjalnego przetwarzania za pomocą białych znaków: pre-wrap. Ponadto rustdoc nie lintuje już missing_doc_code_examples dla elementów wewnątrz impl, a metody i powiązane funkcje są teraz oddzielone na pasku bocznym dokumentacji.

  • Możliwe niezgodności.
    Wersja ta zawiera kilka zmian, które mogą pojawić się w niestandardowym kodzie: w skrajnych przypadkach poprawiono układ niektórych typów wyliczeniowych #[repr(Int)], a także wyłączono niektóre bezużyteczne rzutowania unsize w Pin. Kompilacje WebAssembly teraz ulegają awarii w przypadku niezdefiniowanych symboli, przypadkowo ustabilizowany atrybut #![reexport_test_harness_main] został ponownie objęty funkcją bramkowania, opcja -Csoft-float została usunięta, a minimalna zewnętrzna wersja LLVM została zwiększona do 21. W przypadku AVR typ c_double został zmieniony na f32, ponieważ zmienne typu double w języku C są domyślnie 32-bitowe na tych platformach.

Ź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