Методы работы с памятью в Rust нацелены на исключение ошибок при манипулировании указателями и защиту от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
- В тип slice добавлен метод array_windows, создающий итератор для прохождения по срезам (slice) «окнами» фиксированного размера, сдвигающимися на один элемент за раз. В отличие от ранее доступного метола windows, метод array_windows оперирует постоянным размером окна и возвращает при каждой итерации ссылку на массив фиксированного размера (&[T; N]) вместо среза неопределённого размера (&[T]). Так как размер массива изначально известен компилятору, для повышения производительности можно обойтись без проверки границ массива на каждой стадии итерации.
let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]); assert!(iter.next().is_none());
- В конфигурационных файлах пакетного менеджера Cargo (.cargo/config.toml) реализована директива «include«, позволяющая по месту вставлять содержимое других файлов.
include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ] - В файлы с манифестами и конфигурационные файлы добавлена поддержка новой версии языка разметки TOML 1.1, в которой появилась поддержка многострочных встроенных таблиц, escape-последовательностей «xHH» для вставки шестнадцатеричного представления байтов и «e» для замены «u001B», возможности оставлять запятую в конце последнего элемента и пропускать указание секунд в значениях времени.
serde = { version = "1.0", features = ["derive"] } теперь можно заменить на serde = { version = "1.0", features = ["derive"], } - В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
‹[T]›::array_windows‹[T]›::element_offsetLazyCell::getLazyCell::get_mutLazyCell::force_mutLazyLock::getLazyLock::get_mutLazyLock::force_mutimpl TryFrom‹char› for usizestd::iter::Peekable::next_if_mapstd::iter::Peekable::next_if_map_mut- Встроенные функции для x86-инструкций
avx512fp16 - Встроенные функции для AArch64-инструкций NEON fp16
f32::consts::EULER_GAMMAf64::consts::EULER_GAMMAf32::consts::GOLDEN_RATIOf64::consts::GOLDEN_RATIO
- Признак «const» применён в функциях:
- Платформа riscv64im-unknown-none-elf переведена на третий уровень поддержки. Третий уровень охватывает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
Дополнительно можно отметить недавно анонсированные проекты и события, связанные с Rust:
- Айртон Муньос (Ayrton Muñoz), в своё время реализовавший поддержку платформы Sony PlayStation 1 в компиляторе Rust и занимавшийся портированием FreeBSD на компьютеры с чипами Apple Silicon, реализовал для FreeBSD возможность создания компонентов ядра и драйверов устройств на языке Rust.
Для тестирования предложен набор KPI-обвязок (Kernel Programming Interface), позволяющих использовать код на Rust в ядре FreeBSD, а также созданные с использованием данных обвязок звуковой драйвер virtio (virtio_snd), HID‑драйвер DockChannel для клавиатуры в M2 MacBook и несколько низкоуровневых драйверов для подсистем компьютеров Mac на чипах Apple Silicon.Отмечается, что работа над Rust-обвязками ведётся с конца 2024 года. В обвязках пока реализована лишь часть C‑KPI и они позиционируются как не стабильные, но со временем уровень стабильности планируют довести до аналогичного интерфейса для языка Си. Предложенный в качестве примера драйвер virtio_snd пригоден для воспроизведения музыки в QEMU. Предполагается, что в 2026 году Rust-обвязки будут достаточно стабилизированы для того, чтобы заинтересованные разработчики могли начать использовать их для написания кода.
- Бенни Зигерт (Benny Siegert), участвующий в разработке NetBSD, попытался обосновать причины, по которым поддержка языка Rust не появится в ядре NetBSD: NetBSD поддерживает архитектуры, для которых Rust недоступен; поддержание имеющегося в pkgsrc инструментария Rust требует больших усилий и сопровождается лишь несколькими разработчиками; поддержка Rust в ядре требует включения компилятора Rust в базовую систему; при бутстрэпинге Rust в NetBSD используется прошлая версия бинарного пакета, что недопустимо для самодостаточных дистрибутивов, распространяемых в исходном коде; циклы формирования релизов Rust несовместимы с циклом разработки NetBSD и поддержки прошлых веток (например, продолжается поддерживаться ветка NetBSD 9, выпущенная в 2020 году, в этих условиях потребовалась бы поставка и поддержка компилятора Rust шестилетней давности).
- Опубликован выпуск встраиваемой в приложения СУБД Turso 0.5, написанной на языке Rust и совместимой с SQLite на уровне диалекта SQL, формата файлов БД и C API. Из расширенных возможностей отмечается механизм CDC (Change data capture) для отслеживания изменения БД в реальном времени, использование io_uring для асинхронного ввода/вывода в Linux, поддержка векторного поиска, наличие выражения ALTER для изменения схемы БД, возможность шифрования данных в БД, режим инкрементальных вычислений, конструкция «BEGIN CONCURRENT».
- Проект по предоставлению возможности использования стандартной библиотеки Rust в программах, выполняемых на стороне GPU.
- Emuko — эмулятор RISC-V, написанный на Rust, способный загружать Linux, поддерживающий JIT-компиляцию, способный сохранять и восстанавливать снапшоты состояния.
- RustConn (flatpak) — графический интерфейс для управления внешними сетевыми соединениями к другим хостам, поддерживающий SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust и SFTP. Код написан на Rust с использованием GTK4 и Wayland.
- Представлена новая ветка проекта zlib-rs 0.6, отмеченная как первая стабильная версия, полностью совместимая с zlib C API и пригодная для прозрачной замены zlib. Проект нацелен на создание защищённого аналога библиотеки сжатия данных zlib. Разработка ведётся с оглядкой на проект zlib-ng, развивающий высокопроизводительный вариант zlib.
- Представлен проект vcad, развивающий параметрическую систему автоматизированного проектирования (САПР), написанную на Rust и интегрируемую с AI-агентами при помощи протокола MCP. Поддерживается 3D-моделирование, симуляция, работа с 2D-эскизами, компонентная сборка, импорт в формате STEP и экспорт в форматах STL/GLB/STEP/DXF.
- Опубликована система распознавания речи, написанная на Rust и использующая AI-модель Mistral Voxtral Mini 4B Realtime и фреймворк машинного обучения Burn. Проект ориентирован на распознавание речи на лету для формирования транскрипции при потоковом вещании.
- Состоялся выпуск инструментария c2rust 0.22, предназначенного для трансляции Си-кода (C99) в unsafe-представление на Rust, близкое по своей структуре к изначальному коду на Си. Полученный рабочий каркас в дальнейшем можно использовать для постепенного перевода на идиоматический Rust и избавления от unsafe-блоков.
Источник: http://www.opennet.ru/opennews/art.shtml?num=64929
