Опубликован релиз языка программирования Rust 1.90, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
- В Linux на компьютерах с архитектурой x86_64 для динамического связывания crate-пакетов по умолчанию задействован компоновщик LLD от проекта LLVM. Применение LLD по сравнению с компоновщиком BFD привело к повышению производительности связывания больших исполняемых файлов, проектов с большим объёмом отладочной информации и процесса инкрементальной пересборки. В большинстве случаев LLD обратно совместим с BFD. В случае возникновения проблем можно вернуть BFD, указав в переменной окружения RUSTFLAGS флаг “-C linker-features=-lld” или добавив в файл конфигурации .cargo/config.toml: [target.x86_64-unknown-linux-gnu] rustflags = [“-Clinker-features=-lld”]
- В пакетном менеджере cargo в команде “publish” реализована опция “–workspace”, позволяющая автоматически опубликовать все пакты
из выбранного рабочего пространства (набор пакетов, использующий один файл Cargo.lock и общий каталог результатов сборки), сохраняя порядок следования пакетов и учитывая зависимости между ними. - В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
- u{n}::checked_sub_signed
- u{n}::overflowing_sub_signed
- u{n}::saturating_sub_signed
- u{n}::wrapping_sub_signed
- impl Copy for IntErrorKind
- impl Hash for IntErrorKind
- impl PartialEq<&CStr> for CStr
- impl PartialEq for CStr
- impl PartialEq> for CStr
- impl PartialEq<&CStr> for CString
- impl PartialEq for CString
- impl PartialEq> for CString
- impl PartialEq<&CStr> for Cow
- impl PartialEq for Cow
- impl PartialEq for Cow
- Признак “const” применён в функциях:
- <[T]>::reverse
- f32::floor
- f32::ceil
- f32::trunc
- f32::fract
- f32::round
- f32::round_ties_even
- f64::floor
- f64::ceil
- f64::trunc
- f64::fract
- f64::round
- f64::round_ties_even
- Для целевых платформ на базе библиотеки Must, находящихся на третьем уровне поддержки, включено по умолчанию динамическое связывание: mips64-unknown-linux-muslabi64, powerpc64-unknown-linux-musl, powerpc-unknown-linux-musl, powerpc-unknown-linux-muslspe, riscv32gc-unknown-linux-musl, s390x-unknown-linux-musl и thumbv7neon-unknown-linux-musleabihf.
- Целевая платформа “x86_64-apple-darwin” переведена с первого уровня поддержки на второй (Apple планирует прекратить поддержку архитектуры x86_64). Первый уровень поддержки подразумевает формирование бинарных сборок, проведение досконального тестирования и предоставление наивысшей гарантии поддержки платформы – каждое изменение в компиляторе проверяется выполнением полного тестового набора. Второй уровень поддержки подразумевает гарантию сборки, но отсутствие гарантий при прохождении тестового набора.
Дополнительно можно отметить развитие компанией Micrоsoft инструментария для разработки драйверов для Windows на языке Rust. На GitHub уже размещён набор crate-пакетов для создания драйверов WDM (Windows Driver Kit), KMDF (Kernel-Mode Driver Framework) и UMDF (User-Mode Driver Framework), а также сервисов Win32, пригодных для использования в Windows 11. Целью проекта называется предоставление для разработчиков на языке Rust библиотек и функций, аналогичных тем, что предлагаются в инструментарии WDK для разработчиков на языке Си. На текущем этапе инструментарий разработки драйверов на Rust использует большое число unsafe-вызовов при взаимодействии с подсистемами Windows, но в дальнейшем планируется подготовить безопасные абстракции для структур ядра и DDI (Device Driver Interface).