ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Выпущен Rust 1.81.0: вот что нового и как его обновить

Выпущен Rust 1.81.0: вот что нового и как его обновить

Команда Rust выпустила Rust 1.81.0, в котором представлен ряд улучшений для стабильности языка, производительности и удобства работы с разработчиками.

Rust 1.81.0 поставляется с несколькими новыми функциями и улучшениями, включая стабилизацию функции  Error в core, что делает ее доступной для использования в библиотеках #![no_std].

Алгоритмы сортировки стандартной библиотеки были обновлены для повышения производительности, а также добавлен новый уровень, expect, позволяющий разработчикам явно указывать, где должен встречаться конкретный ворсинок.

Кроме того, было стабилизировано несколько API, включая char::from_u32_uncheckedCStr::count_bytes и CStr::from_ptr.

Эта версия также включает ряд замечаний по совместимости, включая изменения в аргументах перехвата паники и обработчика паники, поведение по умолчанию для неперехваченных паник в функциях  extern "C" и целевое присвоение имен WASI 0.1.

Наконец, обновление включает исправление для CVE-2024-43402, которое повлияло на то, как std::process::Command обрабатывает аргументы при вызове пакетных файлов в Windows.

Давайте подробно обсудим эти новые функции.

 

Что нового в Rust 1.81.0

Эта новая версия содержит несколько ключевых улучшений, в том числе:

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::errorhint::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 в Linux

Чтобы обновить Rust до версии 1.81.0, вы можете использовать rustup инструмент. Если вы установили предыдущую версию Rust с помощью rustup, вы можете обновиться до 1.81.0, выполнив следующую команду в вашем терминале в Linux:

$ rustup update stable

 

Ресурс:

Exit mobile version