Rust 1.85.0: Новый этап развития языка с редакцией Rust 2024

20 февраля 2025 года состоялся выпуск версии 1.85 языка программирования Rust, который маркирован как Rust 2024. Этот шаг завершает процесс стабилизации изменений, внедренных за последние три года. Выданная версия Rust 2024 будет служить основой для расширения функциональности в течение следующих трех лет, как выпуск Rust 2021 стал фундаментом для развития языка в прошедшие годы. Версия Rust 1.80 была анонсирована в июле 2024 года.

Для обеспечения совместимости разработчики могут применять в своих проектах метки 2015, 2018, 2021 и 2024, что позволяет связывать программы с определенными состояниями языка, соответствующими выбранным редакциям Rust. Эти редакции были внедрены для разграничения несовместимых изменений и регулируются в метаданных cargo-пакетов с помощью поля edition в секции [package].

Например, редакция 2021 включает стабилизированные функции на конец 2021 года и охватывает все последующие изменения, сохраняющие совместимость. Редакция 2024 дополнительно включает несовместимые изменения, внедренные в выпуске 1.85 и одобренные для будущего применения. Редакции также учитывают состояние инструментария и документации. Для автоматического обновления кода к новой редакции языка доступна команда cargo fix.

По данным OpenNET, фокус Rust направлен на безопасную работу с памятью и предлагает средства для достижения высокой степени параллелизма, избегая использования сборщиков мусора и runtime, который ограничивается базовой инициализацией и поддержкой стандартной библиотеки.

Методы управления памятью в Rust устраняют ошибки манипуляций с указателями и предотвращают проблемы, возникающие из-за низкоуровневой работы с памятью, такие как доступ к освобожденным участкам памяти, разыменование нулевых указателей и переполнение буфера. Для распространения библиотек, управления сборкой и зависимостями разрабатывается пакетный менеджер Cargo, который взаимодействует с репозиторием crates.io.

Безопасность работы с памятью в Rust достигается на этапе компиляции через проверку ссылок, учет владения и времени жизни объектов, а также оценку корректности доступа к памяти во время выполнения. Rust также предоставляет инструменты для защиты от переполнений, требует инициализации переменных перед их использованием, улучшает обработку ошибок в стандартной библиотеке, применяет концепцию неизменяемых ссылок и переменных по умолчанию, а также предлагает мощную статическую типизацию для минимизации логических ошибок.

К основным изменениям и улучшениям в Rust 1.85 относятся:

– Введена поддержка асинхронных замыканий, обозначаемых как “async || {}”, которые функционируют аналогично асинхронным функциям (async fn);
– Добавлен атрибут “#[diagnostic::do_not_recommend]”, который исключает аннотированные реализации типажей из диагностических сообщений компилятора;
– Предоставлена возможность работы с типажами FromIterator и Extend для кортежей, содержащих до 12 элементов;
– Реализована вторая ступень поддержки платформы powerpc64le-unknown-linux-musl, что подразумевает гарантии сборки.

Основные несовместимости в Rust 2024 касаются следующих аспектов:

– Изменено поведение захвата параметров в «impl Trait», если не применяется новый синтаксис «use<..>», что влияет на видимость параметров.
– В выражениях «if let» изменена область видимости временных значений, которые удаляются до переключения на блок «else».
– Обновлена область видимости временных значений в хвостовых выражениях функций и блоков, теперь они сбрасываются до локальных переменных.
– Запрещены некоторые неопределенные варианты использования mut, ref, ref mut и аналогичных в шаблонах.
– Блоки «extern» необходимо помечать ключевым словом «unsafe».
– Определенные атрибуты должны отмечаться как «unsafe».
– Включено предупреждение по умолчанию для проверки обрамления кода блоками «unsafe {}» в unsafe-функциях.
– Запрещено выставление ссылок на «static mut».
– Lint-проверка many оптимизирована.
– Ключевое слово «gen» зарезервировано для использования в генераторах.
– В стандартной библиотеке расширен список автоматически импортируемых типажей.

Разработчики, участвовавшие в разработке Rust 1.85, составляют 742 человека.