Опубликован релиз языка программирования общего назначения Rust 1.62, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
- В пакетном менеджере “cargo” предложена команда “add”, позволяющая из командной строки добавлять в манифест Cargo.toml новые зависимости или изменять имеющиеся зависимости. Команда также позволяет указывать отдельные свойства (feature) и версии, например: cargo add serde –features derive cargo add nom@5
- Добавлена возможность использования “#[derive(Default)]” с
перечислениями (enum), в которых при помощи атрибута “#[default]” определён вариант по умолчанию. #[derive(Default)] enum Maybe { #[default] Nothing, Something(T), } - На платформе Linux задействована более компактная и быстрая реализация механизма синхронизации Mutex, основанная на применении фьютексов, предоставляемых ядром Linux. В отличие от ранее используемой реализации на базе библиотеки pthreads, для хранения состояния Mutex в новом варианте расходуется всего 5 байт вместо 40. Аналогично на futex переведены механизмы блокировок Condvar и RwLock.
- Реализован второй уровень поддержки целевой платформы x86_64-unknown-none, предназначенной для формирования исполняемых файлов, способных работать без операционной системы. Например, указанная целевая платформа может использоваться при написании компонентов ядра. Второй уровень поддержки подразумевает гарантию сборки.
- Реализован третий уровень поддержки для платформ aarch64-pc-windows-gnullvm и x86_64-pc-windows-gnullvm. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
- В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
- bool::then_somef32::total_cmpf64::total_cmpStdin::lineswindows::CommandExt::raw_argimpl значение по умолчанию для AssertUnwindSafeFrom> for RcFrom> для ArcFusedIterator для EncodeWide