Апублікаваны рэліз Іржа 1.96.0 - чарговы стабільнай версіі мовы праграмавання Rust. Абнаўленне выйшла 28 мая 2026 года; устанавіць яго можна стандартнай камандай rustup update stable. Галоўнымі зменамі сталі новыя тыпы дыяпазонаў ў core::range, стабілізацыя макрасаў для праверкі адпаведнасці шаблонам, узмацненне жорсткасці паводзін WebAssembly-зборак і выпраўленні двух уразлівасцяў у Cargo.
асноўныя змены
Новыя тыпы дыяпазонаў core::range::Range*.
У стандартнай бібліятэцы стабілізаваны новыя варыянты дыяпазонаў: core::range::Range, RangeFrom, RangeInclusive і злучаныя з імі ітэратары. У адрозненне ад старых тыпаў з core::ops, новыя дыяпазоны не рэалізуюць Iterator напрамую, а пераўтворацца ў ітэратар праз IntoIterator. Дзякуючы гэтаму такія дыяпазоны могуць быць Copy, што зручна, напрыклад, пры захоўванні дыяпазону як палі структуры. Сінтаксіс накшталт 0..1 пакуль стварае старыя тыпы дыяпазонаў, але ў будучай рэдакцыі мовы яго плануюць перавесці на новыя тыпы.Дададзеныя assert_matches! і debug_assert_matches!.
Новыя макрасы дазваляюць правяраць, што значэнне адпавядае зададзенаму шаблоне. Па сэнсе гэта падобна на assert!(matches!(…)), але пры памылцы выводзіцца Debug-прадстаўленне значэння, што спрашчае дыягностыку. У prelude макрасы не дадалі, каб не канфліктаваць з папулярнымі іншымі crate'амі, таму іх трэба імпартаваць відавочна з core ці std.Змененыя паводзіны WebAssembly-мэтаў.
Rust больш не перадае лінкеру allow-undefined для WebAssembly-зборак. Цяпер нявызначаныя знакі пры лінкоўцы лічацца памылкай, а не ператвараюцца аўтаматычна ў імпарты з модуля "env". Гэта павінна раней выяўляць памылкі зборкі і няправільныя імёны сімвалаў. Старыя паводзіны пры неабходнасці можна вярнуць праз RUSTFLAGS=-Clink-arg=—allow-undefined ці відавочна паказаць імпартаваны wasm-модуль праз #[link(wasm_import_module = "env")].Cargo атрымаў выпраўленні бяспекі.
Змяненні ў мове.
У рэліз увайшлі некалькі кропкавых выпраўленняў і пашырэнняў: дазволеная перадача expr-метапеременных макрасаў у cfg, адкарэктаванае прывядзенне never-type у выразах-картэжах, выпраўленыя рэдкія выпадкі няслушных падказак высновы тыпаў для аргументаў функцый, дададзеная падтрымка вектарных рэгістраў s390x у inline assembly, а таксама гэта выпраўляе рэгрэсію, якая з'явілася ў Rust 1.94.0.Змены ў кампілятары і платформах.
Для Linux-мэтаў на LoongArch уключаная падтрымка link relaxation - аптымізацыі лінкоўкі, якая дазваляе спрасціць некаторыя пераходы і звароты пасля размяшчэння кода. Для riscv64gc-unknown-fuchsia абноўлена базавая канфігурацыя да профіля RVA22 з падтрымкай вектарных пашырэнняў.Абнаўленні стандартнай бібліятэкі.
Дададзена падтрымка ітэрацыі па дыяпазонах NonZero-цэлых лікаў. Таксама выпраўлена адкладзеная апрацоўка адрасоў хаста ў SGX праз ToSocketAddr, а ў дакументацыі і ўнутраных кантрактах удакладнена вызначэнне памяці, "дапушчальнай для чытання/запісы": нулявы паказальнік выключаны з агульнага вызначэння, а выключэнні паказваюцца асобна для канкрэтных метадаў.Стабілізаваныя API.
Сярод стабілізаваных інтэрфейсаў – assert_matches!, debug_assert_matches!, рэалізацыі From для AssertUnwindSafe , LazyCell і LazyLock , а таксама новыя тыпы і ітэратары дыяпазонаў з core::range, у тым ліку Range, RangeFrom, RangeToInclusive і іх ітэратары.Cargo: змены для залежнасцяў і дакументацыі.
Зараз залежнасць можа адначасова паказваць Git-рэпазітар і альтэрнатыўны registry: лакальна будзе выкарыстоўвацца Git-версія, а пры публікацыі - версія з registry, аналагічна паводзінам з crates.io. Таксама дададзена падтрымка target.'cfg(..)'.rustdocflags у канфігурацыі Cargo.Rustdoc стаў акуратней апрацоўваць дакументацыю.
Нататкі аб deprecated API зараз рэндэрацца як звычайная дакументацыя, без ранейшай спецыяльнай апрацоўкі праз white-space: pre-wrap. Акрамя таго, rustdoc больш не выдае lint missing_doc_code_examples для элементаў усярэдзіне impl, а ў бакавой панэлі дакументацыі метады і асацыіраваныя функцыі падзяляюцца асобна.Магчымыя несумяшчальнасці.
У рэлізе ёсць некалькі змен, якія могуць выявіцца на нетыповым кодзе: выпраўленая раскладка некаторых #[repr(Int)] enum у крайніх выпадках, забароненыя некаторыя бескарысныя unsize-прывядзенні ў Pin , WebAssembly-зборкі зараз падаюць пры нявызначаных сімвалах, выпадкова стабілізаваны атрыбут #![reexport_test_harness_main] зноў зачынены feature gate'ом, выдалены параметр -Csoft-float, а мінімальная версія знешняга LLVM падвышаная да 21. Для AVR зменены тып c_ змаўчанні зяўляецца 32-бітным.
Крыніца: linux.org.ru
