Pas 1.96.0

Buraxılış dərc edilib Pas 1.96.0 — очередной стабильной версии языка программирования Rust. Обновление вышло 28 May 2026 il; установить его можно стандартной командой rustup update stable. Главными изменениями стали новые типы диапазонов в core::range, стабилизация макросов для проверки соответствия шаблонам, ужесточение поведения WebAssembly-сборок и исправления двух уязвимостей в Cargo.

Əsas dəyişikliklər

  • Новые типы диапазонов 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 получил исправления безопасности.
    В Rust 1.96.0 закрыты две уязвимости, затрагивающие пользователей сторонних registry. CVE-2026-5223 связана с обработкой symlink внутри tar-архивов crate: вредоносный пакет из стороннего registry мог перезаписать кэш другого пакета из того же registry. Начиная с Rust 1.96.0 Cargo отвергает crate-архивы с symlink. CVE-2026-5222 связана с нормализацией URL sparse registry и в редких условиях могла привести к отправке Cargo-токена на вредоносный registry. Пользователи crates.io, по заявлению команды Rust, этими проблемами не затронуты.

  • Изменения в языке.
    Buraxılışa aşağıdakılar daxildir: несколько точечных исправлений и расширений: разрешена передача expr-метапеременных макросов в cfg, скорректировано приведение never-type в выражениях-кортежах, исправлены редкие случаи неверных подсказок вывода типов для аргументов функций, добавлена поддержка векторных регистров s390x в inline assembly, а также снова разрешено использовать константы типа ManuallyDrop как шаблоны — это исправляет регрессию, появившуюся в Rust 1.94.0.

  • Изменения в компиляторе и платформах.
    Uğrunda Linux-целей на LoongArch включена поддержка link relaxation — оптимизации линковки, позволяющей упростить некоторые переходы и обращения после размещения кода. Для riscv64gc-unknown-fuchsia обновлена базовая конфигурация до профиля RVA22 с поддержкой векторных расширений.

  • Обновления стандартной библиотеки.
    Добавлена поддержка итерации по диапазонам NonZero-целых чисел. Также исправлена отложенная обработка адресов хоста в SGX через ToSocketAddr, а в документации и внутренних контрактах уточнено определение памяти, «допустимой для чтения/записи»: нулевой указатель исключён из общего определения, а исключения указываются отдельно для конкретных методов.

  • Стабилизированные API.
    Среди стабилизированных интерфейсов — assert_matches!, debug_assert_matches!, реализации From<T> для AssertUnwindSafe<T>, LazyCell<T, F> и LazyLock<T, F>, а также новые типы и итераторы диапазонов из 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<Foo>, WebAssembly-сборки теперь падают при неопределённых символах, случайно стабилизированный атрибут #![reexport_test_harness_main] снова закрыт feature gate’ом, удалён параметр -Csoft-float, а минимальная версия внешнего LLVM повышена до 21. Для AVR изменён тип c_double на f32, поскольку на этих целях C double по умолчанию является 32-битным.

Mənbə: linux.org.ru

DDoS mühafizəsi, VPS VDS serverləri olan saytlar üçün etibarlı hostinq alın 🔥 DDoS qorunması, VPS VDS serverləri ilə etibarlı veb sayt hostinqi alın | ProHoster