Эпоха C++ подходит к концу? Microsoft делает ставку на Rust для самого важного кода

leer en español

Эпоха C++ подходит к концу? Microsoft делает ставку на Rust для самого важного кода

Rust 1.90 меняет правила игры для больших проектов.

image

Опубликован выпуск языка программирования Rust 1.90. Он продолжает развиваться под управлением некоммерческой Rust Foundation, хотя изначально создавался в Mozilla. Rust позиционируется как средство безопасной работы с памятью и предоставляет инструменты для параллельного выполнения задач без использования сборщика мусора.

Контроль за владением объектами, областью их видимости и корректностью доступа к памяти встроен в сам компилятор. Такой подход исключает целый класс ошибок: от выхода за границы буфера и разыменования нулевых указателей до обращения к освобождённым областям памяти. Дополнительно язык защищает от целочисленных переполнений, требует инициализации переменных перед использованием, реализует неизменяемость значений по умолчанию и строгую статическую типизацию, что снижает риск логических сбоев.

Ключевым инструментом экосистемы остаётся пакетный менеджер Cargo, через который управляются сборки и зависимости. Для публикации библиотек применяется репозиторий crates.io. В новой версии улучшен механизм публикации: команда cargo publish получила флаг --workspace, позволяющий за одно действие выгрузить все пакеты из общего рабочего пространства с учётом их последовательности и зависимостей.

Среди технических новшеств стоит отметить переход в Linux на x86_64 к использованию компоновщика LLD от проекта LLVM при динамическом связывании crate-пакетов. Это решение ускоряет сборку крупных проектов, особенно при работе с большим количеством отладочной информации, а также заметно повышает скорость инкрементальной пересборки. Совместимость с прежним компоновщиком BFD сохранена, а в случае необходимости возврата можно использовать настройку переменной окружения RUSTFLAGS с параметром «-C linker-features=-lld» или внести изменения в файл .cargo/config.toml.

В разряд стабильных API переведён целый блок функций и типажей. Теперь поддерживаются методы u{n}::checked_sub_signed, u{n}::overflowing_sub_signed, u{n}::saturating_sub_signed и u{n}::wrapping_sub_signed. Стабилизированы реализации Copy и Hash для IntErrorKind, а также множественные варианты сравнения типов CStr, CString и Cow. Кроме того, признак const был добавлен в ряд функций работы с числами с плавающей точкой, включая floor, ceil, trunc, fract и round как для f32, так и для f64.

Изменения затронули и поддерживаемые платформы. Для ряда целевых систем на базе библиотеки Musl, включая mips64-unknown-linux-muslabi64, powerpc64-unknown-linux-musl и riscv32gc-unknown-linux-musl, по умолчанию включено динамическое связывание. В то же время платформа x86_64-apple-darwin переведена со статуса первого уровня поддержки на второй. Это связано с планами Apple по отказу от архитектуры x86_64. Теперь гарантируется возможность сборки под macOS, но проведение полного тестового набора обеспечиваться не будет.

Отдельное направление развития связано с Windows. Microsoft продвигает проект по созданию набора библиотек для разработки драйверов на Rust. На GitHub уже доступны crate-пакеты для работы с WDM, KMDF и UMDF, а также для создания сервисов Win32, совместимых с Windows 11. Сейчас инструментарию ещё требуются небезопасные вызовы для работы с внутренними компонентами системы, однако в будущем планируется добавить абстракции, исключающие прямое использование небезопасного кода. Проект распространяется под лицензиями MIT и Apache 2.0.

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