Команда Rust выпустила Rust 1.81.0, в котором представлен ряд улучшений для стабильности языка, производительности и удобства работы с разработчиками.
Rust 1.81.0 поставляется с несколькими новыми функциями и улучшениями, включая стабилизацию функции Error
в core
, что делает ее доступной для использования в библиотеках #![no_std]
.
Алгоритмы сортировки стандартной библиотеки были обновлены для повышения производительности, а также добавлен новый уровень, expect
, позволяющий разработчикам явно указывать, где должен встречаться конкретный ворсинок.
Кроме того, было стабилизировано несколько API, включая char::from_u32_unchecked
, CStr::count_bytes
и CStr::from_ptr
.
Эта версия также включает ряд замечаний по совместимости, включая изменения в аргументах перехвата паники и обработчика паники, поведение по умолчанию для неперехваченных паник в функциях extern "C"
и целевое присвоение имен WASI 0.1.
Наконец, обновление включает исправление для CVE-2024-43402, которое повлияло на то, как std::process::Command
обрабатывает аргументы при вызове пакетных файлов в Windows.
Давайте подробно обсудим эти новые функции.
Эта новая версия содержит несколько ключевых улучшений, в том числе:
1. Стабилизация core::error::Error
:
Rust 1.81.0 стабилизирует функцию Error
в core
библиотеке, делая ее пригодной для использования в библиотеках #![no_std]
. Это позволяет проводить более широкую стандартизацию по одному и тому же параметру Error
во всей экосистеме Rust, независимо от целевой среды.
2. Новые реализации сортировки:
Как стабильные, так и нестабильные реализации сортировки в стандартной библиотеке выигрывают от обновленных алгоритмов, что приводит к повышению производительности среды выполнения и времени компиляции.
Обновленные алгоритмы также активно обнаруживают неправильные реализации Ord
и вызывают панику, предотвращая неожиданное поведение и поощряя разработчиков поддерживать правильный порядок реализации.
3. Введение #[expect(lint)]
:
Этот новый уровень ворса позволяет разработчикам явно указывать, когда должен произойти конкретный ворс, выдавая предупреждение, если этого не произойдет.
Это полезно для временного отключения lint из-за текущего рефакторинга или ошибок в реализации lint, при этом сохраняя осведомленность о том, когда lint необходимо устранить.
Например, при переносе кодовой базы для соответствия новому ограничению, введенному Clippy lint, разработчики могут использовать #[expect(lint)]
для отслеживания прогресса и обеспечения возможности применения lint, как только кодовая база станет совместимой.
4. Причины появления ворса:
Разработчики теперь могут указывать причины при изменении уровней ворса. Эти причины включаются в сообщения компилятора, предоставляя контекст и ясность другим разработчикам, которые могут столкнуться с ворсом в будущем.
Например, если в проекте отключена арифметика с плавающей запятой с использованием #![deny(clippy::float_arithmetic)]
из-за работы в среде без поддержки с плавающей запятой, можно добавить причину, объясняющую это решение непосредственно в коде.
5. Стабилизированные API и постоянное расширение контекста:
Rust 1.81.0 стабилизирует несколько API, включая core::error
, hint::assert_unchecked
и fs::exists
. Кроме того, больше API, таких как char::from_u32_unchecked
и CStr::from_ptr
, теперь стабильны в const контекстах, расширяя функциональность, доступную в const контекстах.
6. Улучшена безопасность и совместимость:
В Rust 1.81.0 внесен ряд изменений для повышения безопасности и совместимости. К ним относятся разделение аргументов panic hook и panic handler, прерывание при неперехваченных паниках в функциях extern "C"
(поощряется использование вариантов -unwind
ABI с суффиксом для выхода за границы ABI) и переименование целевого параметра WASI 0.1 с wasm32-wasi
на wasm32-wasip1
(с планами удаления wasm32-wasi
в январе 2025 года).
Помимо этих основных изменений, Rust 1.81.0 включает исправление для CVE-2024-43402, обеспечивающее корректное экранирование аргументов при вызове пакетных файлов в Windows с помощью std::process::Command
.
Этот выпуск также включает множество других улучшений и исправлений ошибок в Rust, Cargo и Clippy.
Чтобы обновить Rust до версии 1.81.0, вы можете использовать rustup
инструмент. Если вы установили предыдущую версию Rust с помощью rustup
, вы можете обновиться до 1.81.0, выполнив следующую команду в вашем терминале в Linux:
$ rustup update stable
Ресурс: