Домой Софт Rust 1.96.0: новые типы диапазонов, безопасность Cargo и изменения в WebAssembly

Rust 1.96.0: новые типы диапазонов, безопасность Cargo и изменения в WebAssembly

Язык Rust обновился до версии 1.96.0: стабилизированы core::range, добавлены полезные макросы и закрыты уязвимости в пакетном менеджере.

Rust 1.96.0: новые типы диапазонов, безопасность Cargo и изменения в WebAssembly
Rust 1.96.0: новые типы диапазонов, безопасность Cargo и изменения в WebAssembly — иллюстрация к материалу. Источник: linux.org.ru

Состоялся релиз Rust 1.96.0 — актуальной стабильной версии популярного языка программирования. Обновление, ставшее доступным 28 мая 2026 года, можно установить через стандартную утилиту rustup (команда rustup update stable). Ключевыми нововведениями стали стабилизация новых типов диапазонов, внедрение удобных макросов для проверки шаблонов, изменение правил сборки для WebAssembly и устранение критических уязвимостей в пакетном менеджере Cargo.

Ключевые новшества

  • Обновленные типы диапазонов: В стандартную библиотеку добавлены новые структуры core::range::Range, RangeFrom, RangeInclusive и соответствующие итераторы. Новые типы не реализуют Iterator напрямую, а используют IntoIterator. Это позволяет им реализовывать трейт Copy, что упрощает работу с ними в качестве полей структур. Пока синтаксис 0..1 по-прежнему создает старые типы, но в будущем планируется полный переход на новые.
  • Макросы для проверки шаблонов: Внедрены макросы assert_matches! и debug_assert_matches!. Они упрощают диагностику, проверяя соответствие значения заданному шаблону, и выводят Debug-представление при ошибке. Макросы необходимо импортировать из core или std вручную.
  • Безопасность Cargo: Исправлены две уязвимости (CVE-2026–5223 и CVE-2026–5222), затрагивающие сторонние реестры. В частности, Cargo теперь отклоняет архивы с символическими ссылками, чтобы предотвратить перезапись кэша, и исправлена нормализация URL, исключающая утечку токенов. Пользователи официального crates.io в безопасности.
  • WebAssembly: Отменена передача флага --allow-undefined для Wasm-сборок. Теперь неопределенные символы вызывают ошибку линковки, а не превращаются в импорты «env» по умолчанию.

Изменения в языке, компиляторе и библиотеках

  • Язык и компилятор: Разрешено использование expr-метапеременных в cfg, улучшено выведение типов в кортежах, добавлена поддержка векторных регистров s390x для встроенного ассемблера. Также восстановлена возможность использования констант ManuallyDrop как шаблонов.
  • Платформы: Для Linux-целей на архитектуре LoongArch включена оптимизация link relaxation. Профиль для riscv64gc-unknown-fuchsia обновлен до RVA22.
  • Стандартная библиотека: Добавлена поддержка итерации по диапазонам NonZero-чисел. Стабилизированы такие интерфейсы, как LazyCell и LazyLock, а также реализации From для AssertUnwindSafe.
  • Cargo и документация: Улучшена работа с зависимостями: теперь можно указывать Git-репозиторий и альтернативный реестр одновременно. Rustdoc стал корректнее обрабатывать deprecated-элементы и разделять методы и ассоциированные функции в боковой панели.

Потенциальные несовместимости

Разработчикам стоит обратить внимание на возможные изменения поведения в специфических сценариях: минимальная версия LLVM теперь составляет 21, удален параметр -Csoft-float, а для архитектуры AVR тип c_double приведен к f32. Также ужесточены проверки для Pin и исправлена раскладка некоторых #[repr(Int)] перечислений.

Источник: https://www.linux.org.ru