Выпуск Rust 1.94. Эксперименты с Rust в ядре FreeBSD. СУБД Turso и САПР vcad на Rust

Опубликован релиз языка программирования 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, в том числе стабилизированы методы и реализации типажей:
  • Признак «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