Публикувано е издание Rust 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 получи корекции за сигурност.
Промени в езика.
В релизa влязоха Няколко специфични корекции и разширения: разрешена предаването на expr-мета променливи от макроси в cfg, коригиран е приводът на never-type в кортежни изрази, поправени са редки случаи на неверни подканвания за типове в аргументите на функциите, добавена е поддръжка на векторни регистри s390x в inline assembly, а също така отново е разрешено използването на константи от типа ManuallyDrop като шаблони — това поправя регресията, появила се в 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-репозитория и алтернативен регистър: локално ще се използва версията от Git, а при публикуване — версия от регистъра, подобно на поведението с 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_double на f32, тъй като на тези цели C double по подразбиране е 32-битов.
Източник: linux.org.ru
