Опубліковано реліз Іржа 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 це виправляє регресію, що з'явилася в Rust 1.94.0.Зміни у компіляторі та платформах.
Для Linux-цілей на LoongArch включена підтримка link relaxation - оптимізації лінківки, що дозволяє спростити деякі переходи та звернення після розміщення коду. Для riscv64gc-unknown-fuchsia оновлено базову конфігурацію до профілю RVA22 з підтримкою векторних розширень.Оновлення стандартної бібліотеки.
Додано підтримку ітерації за діапазонами NonZero-цілих чисел. Також виправлено відкладене оброблення адрес хоста в SGX через ToSocketAddr, а в документації та внутрішніх контрактах уточнено визначення пам'яті, «допустимої для читання/запису»: нульовий покажчик виключений із загального визначення, а винятки вказуються окремо для конкретних методів.Стабілізовані API.
Серед стабілізованих інтерфейсів - assert_matches!, debug_assert_matches! для 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
