Опубликован релиз языка системного программирования Rust 1.54, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Автоматическое управление памятью в Rust избавляет разработчика от ошибок при манипулировании указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Основные новшества:
- Добавлена возможность использования внутри атрибутов макросов, напоминающих функции (процедурные макросы и макросы, созданные при помощи макроса “macro_rules!”). От функций подобные макросы отличаются символом “!” после имени (macro!(…)) и подстановкой исходного текста макроса вместо генерирования вызова функции. Вызов макросов внутри атрибутов может оказаться полезным для включения в документирующие комментарии содержимого из других файлов. Например, для вставки содержимого файла README и результата выполнения скрипта можно указать: #![doc = include_str!(“README.md”)] #[path = concat!(env!(“OUT_DIR”), “/generated.rs”)] mod generated;
- Стабилизированы встроенные в компилятор функции (Intrinsics) для платформы wasm32, позволяющие использовать инструкции SIMD в WebAssembly. Большая часть функций, таких как v128_bitselect, доступны в режиме “safe”, но некоторые функции работающие с указателями (например, v128_load) остаются “unsafe”.
- Возвращено применение по умолчанию инкрементальной компиляции, позволяющей пересобирать только изменившиеся части кода, что позволяет значительно сократить время сборки проекта при повторной компиляции после внесения мелких правок. Инкрементальная компиляция была отключена в выпуске 1.52.1 из-за выявления скрытых ошибок, всплывших после добавления дополнительной проверки загрузки данных из дискового кэша.
- В разряд стабильных переведена новая порция API, в том числе стабилизированы:
- BTreeMap::into_keys
- BTreeMap::into_values
- HashMap::into_keys
- HashMap::into_values
- arch::wasm32
- VecDeque::binary_search
- VecDeque::binary_search_by
- VecDeque::binary_search_by_key
- VecDeque::partition_point