Na-publish na ang release Kalawang 1.96.0 — ang pinakabagong matatag na bersyon ng wikang pamprograma ng Rust. Inilabas na ang update. 28 Mayo 2026 taon; maaari itong i-install gamit ang karaniwang utos na rustup update stable. Kabilang sa mga pangunahing pagbabago ang mga bagong uri ng range sa core::range, pagpapatatag ng mga macro na tumutugma sa pattern, pagpapahigpit ng gawi sa pagbuo ng WebAssembly, at mga pag-aayos para sa dalawang kahinaan sa Cargo.
Pangunahing pagbabago
Mga bagong uri ng range na core::range::Range*.
Ang mga bagong uri ng range ay na-stabilize na sa karaniwang library: core::range::Range, RangeFrom, RangeInclusive, at ang mga kaugnay nitong iterator. Hindi tulad ng mga lumang uri mula sa core::ops, ang mga bagong range ay hindi direktang nagpapatupad ng Iterator, ngunit kino-convert sa isang iterator sa pamamagitan ng IntoIterator. Pinapayagan nito ang mga range na ito na maging Copyable, na maginhawa, halimbawa, kapag nag-iimbak ng isang range bilang isang structure field. Ang syntax tulad ng 0..1 ay kasalukuyang lumilikha ng mga lumang uri ng range, ngunit pinaplano itong ilipat sa mga bagong uri sa isang susunod na bersyon ng wika.Idinagdag ang assert_matches! at debug_assert_matches!.
Ang mga bagong macro ay nagbibigay-daan sa iyong suriin kung ang isang halaga ay tumutugma sa isang ibinigay na pattern. Ito ay katulad ng konsepto sa assert!(matches!(…)), ngunit kung sakaling magkaroon ng error, isang debug representation ng halaga ang inililimbag, na nagpapasimple sa mga diagnostic. Ang mga macro na ito ay hindi idinagdag sa Prelude upang maiwasan ang mga conflict sa mga sikat na third-party crate, kaya dapat itong tahasang i-import mula sa core o std.Binago ang gawi ng mga target ng WebAssembly.
Hindi na ipinapasa ng Rust ang --allow-undefined sa linker para sa mga WebAssembly build. Ang mga undefined na simbolo ay itinuturing na ngayong mga error habang nagli-link, sa halip na awtomatikong i-convert sa mga import mula sa "env" module. Dapat nitong mas maaga na mahuli ang mga error sa build at mga hindi wastong pangalan ng simbolo. Maaaring ibalik ang dating gawi, kung kinakailangan, gamit ang RUSTFLAGS=-Clink-arg=--allow-undefined o sa pamamagitan ng tahasang pagtukoy sa na-import na wasm module gamit ang #[link(wasm_import_module = "env")].Nakatanggap ang Cargo ng mga pagsasaayos sa seguridad.
Mga pagbabago sa wika.
Kasama sa paglabas ang: Ilang maliliit na pag-aayos at pagpapahusay: Pinayagan ang pagpasa ng expr metavariables ng mga macro sa cfg, naitama ang never-type casting sa mga tuple expression, inayos ang mga bihirang kaso ng maling type inference hints para sa mga function argument, nagdagdag ng suporta para sa mga s390x vector register sa inline assembly, at muling pinayagan ang mga ManuallyDrop constant bilang mga template—inaayos nito ang isang regression na ipinakilala sa Rust 1.94.0.Mga pagbabago sa compiler at mga platform.
Para sa LinuxPinagana ang suporta sa link relaxation para sa mga target ng LoongArch—isang linking optimization na nagpapadali sa ilang transition at calls pagkatapos ng code deployment. Para sa riscv64gc-unknown-fuchsia, na-update ang base configuration sa RVA22 profile na may suporta para sa mga vector extension.Mga karaniwang pag-update ng library.
Naidagdag ang suporta para sa pag-ulit sa mga hanay ng integer na NonZero. Naayos na rin ang malaswang paghawak ng mga host address sa SGX sa pamamagitan ng ToSocketAddr, at nilinaw ang kahulugan ng memoryang "readable/writeable" sa dokumentasyon at mga panloob na kontrata: inalis na ang null pointer mula sa pangkalahatang kahulugan, at ang mga eksepsiyon ay tinukoy na ngayon nang hiwalay para sa mga partikular na pamamaraan.Mga na-stabilize na API.
Kabilang sa mga stabilized interface ay ang assert_matches!, debug_assert_matches!, mga implementasyon ng From para sa AssertUnwindSafe , LazyCell at LazyLock , pati na rin ang mga bagong uri ng range at iterator mula sa core::range, kabilang ang Range, RangeFrom, RangeToInclusive at ang kanilang mga iterator.Kargamento: Mga pagbabago sa mga dependency at dokumentasyon.
Maaari nang tukuyin ng isang dependency ang parehong Git repository at alternatibong registry: ang bersyon ng Git ay gagamitin nang lokal, at ang bersyon ng registry ay gagamitin habang naglalathala, katulad ng ginagawa sa crates.io. Idinagdag din ang suporta para sa target.'cfg(..)'.rustdocflags sa configuration ng Cargo.Mas tumpak na ngayon ang paghawak ng dokumentasyon sa Rustdoc.
Ang mga hindi na ginagamit na tala ng API ay nire-render na ngayon bilang regular na dokumentasyon, nang wala ang dating espesyal na pagproseso sa pamamagitan ng white-space: pre-wrap. Bukod pa rito, hindi na nagli-lint ang rustdoc ng missing_doc_code_examples para sa mga elemento sa loob ng impl, at ang mga methods at mga kaugnay na function ay pinaghihiwalay na ngayon sa sidebar ng dokumentasyon.Mga posibleng hindi pagkakatugma.
Ang release ay naglalaman ng ilang mga pagbabago na maaaring lumabas sa hindi karaniwang code: ang layout ng ilang #[repr(Int)] enums ay naayos na sa matinding mga kaso, at ang ilang walang kwentang unsize casts sa Pin ay hindi na pinagana. , Nagkaka-crash na ngayon ang mga WebAssembly build sa mga hindi natukoy na simbolo, ang aksidenteng na-stabilize na #![reexport_test_harness_main] attribute ay muling na-feature gate, inalis ang opsyong -Csoft-float, at ang minimum na external LLVM na bersyon ay itinaas sa 21. Para sa AVR, ang c_double type ay binago sa f32, dahil ang mga C double ay 32-bit bilang default sa mga target na ito.
Pinagmulan: linux.org.ru
