Опубликован релиз языка программирования Rust 1.94, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в 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-блоков.
Источник: https://www.opennet.ru/opennews/art.shtml?num=64929






