3 апреля 2025 года состоялся релиз языка программирования Rust 1.86. Вклад в разработку этого обновления внесли 394 программиста со всего мира. Версии проекта Rust 1.80 вышла в июле 2024 года. Релиз Rust 1.85.0 (Rust 2024) состоялся 20 февраля.
По информации OpenNET, язык Rust сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные изменения и дополнения в Rust 1.86 (Rust, Cargo и Clippy):
добавлена поддержка приведения (upcast) типажей к базовому супертипажу (supertrait), то есть появилась возможность прямого преобразования ссылки на объект типажа в ссылку на объект супертипажа без необходимости создания специального метода в типаже, возвращающего ссылку на супертипаж;
в HashMap и срезы (slice) добавлен метод get_disjoint_mut() для одновременного получения нескольких изменяемых ссылок на элементы;
разрешено маркировать safe-функции при помощи атрибута "#[target_feature]", указывающего, что функция использует заданные возможности CPU. Safe-функцию, помеченную атрибутом "#[target_feature]", другая safe-функция может безопасно вызвать только при условии, что она тоже помечена "#[target_feature]" (иначе подобные функции нужно вызывать в unsafe-блоке). При этом их нельзя передавать в функции, принимающие обобщенные (generic) параметры, ограниченные типажами Fn*. Ранее атрибут "#[target_feature]" мог применяться только к функциям, помеченным как "unsafe";
в компиляторе Rust включена подстановка отладочных проверок (debug-assert), что указатель не содержит значение NULL при чтении и записи ненулевых размеров, а также при повторном заимствовании (reborrow) указателя в ссылку;
по умолчанию включена lint-проверка "missing_abi", приводящая к выводу предупреждения, если после ключевого слова extern не указан ABI. Ранее, если после extern не указан ABI, подразумевалось, что используется ABI "C". Теперь рекомендуется явно указывать ABI "C", например, 'extern "C" {}' и 'extern "C" fn';
реализован третий уровень поддержки для платформ {aarch64-unknown,x86_64-pc}-nto-qnx710_iosock, {aarch64-unknown,x86_64-pc}-nto-qnx800, {x86_64,i686}-win7-windows-gnu, amdgcn-amd-amdhsa, x86_64-pc-cygwin, {mips,mipsel}-mti-none-elf, m68k-unknown-none-elf, armv7a-nuttx-{eabi,eabihf}, aarch64-unknown-nuttx и thumbv7a-nuttx-{eabi,eabihf}. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода;
добавлено предупреждение о прекращении второго уровня поддержки для целевой платформы i586-pc-windows-msvc в следующем выпуске (1.87). Рекомендуется использовать платформу i686-pc-windows-msvc, которая отличается поддержкой инструкций SSE2. Платформа i586-pc-windows-msvc потеряла смысл, так как для Windows 10 необходима поддержка SSE2, а более ранние выпуски Windows в Rust не поддерживаются.
Источник новости: habr.com