Fearless SIMD 1.0: безопасные SIMD-абстракции для Rust без unsafe-кода
22 сентября 2026 года разработчик под ником Shnatsel объявил в блоге о выходе версии 1.0 библиотеки Fearless SIMD для языка Rust, а вместе с ней, новой сопутствующей библиотеки fearless_simd_macros v0.1. Проект развивался с момента появления первого прототипа 8 лет назад и предоставляет безопасные абстракции для SIMD-вычислений (одновременная обработка нескольких значений одной инструкцией процессора).
Главная идея проекта, избавить разработчиков от небезопасного (unsafe) кода, которым обычно изобилуют библиотеки для работы с SIMD: по словам автора, поиск unsafe-блоков в типичных альтернативах выдаёт несколько тысяч совпадений. Fearless SIMD спроектирована так, чтобы не требовать ad-hoc unsafe-кода вовсе: макрос kernel! опирается на возможности компилятора (target feature v1.1) и позволяет вызывать большинство SIMD-интринсиков без unsafe, а операции загрузки и записи данных через указатели вынесены в два небольших, компактных модуля безопасной трансформации памяти (safe transmute), вдохновлённых библиотеками bytemuck и zerocopy. По утверждению автора, если эти два блока памяти-безопасны, то безопасность гарантирована и для всего остального кода библиотеки благодаря системе типов Rust.
В части производительности авторы утверждают, что ограничений "потолка" нет: при необходимости можно безопасно опускаться до платформенных intrinsics без накладных расходов, сохраняя остальной код переносимым. Для операций с разным поведением на разных платформах (например, свопы значений или максимум чисел с плавающей запятой) предусмотрены как точный вариант с одинаковым результатом везде, так и быстрый, с платформозависимым результатом.
Отдельная часть релиза посвящена эргономике: новая библиотека fearless_simd_macros вводит макрос #[simd], который избавляет от необходимости вручную расставлять аннотации инлайнинга или мириться с накладными расходами на вызовы функций, типичными проблемами при мультиверсионировании функций в Rust. Старый способ работы без макроса остаётся доступен для тех, кто не хочет использовать процедурные макросы. Код, написанный сегодня как с макросом #[simd], так и без него, продолжит работать бессрочно, эргономика может развиваться дальше, но это не затрагивает гарантии стабильности ядра библиотеки.
Автор также сообщил, что проект будет получать обновления безопасности в течение 3 лет для версии 1.0 и всех последующих версий, и что заложены пути поддержки будущих возможностей Rust (например, типа f16) и будущих аппаратных расширений (SVE, RISC-V Vector Extension) без поломки API. Отдельно затронуто отношение к std::simd, стандартной библиотечной попытке SIMD в самом Rust: даже после её стабилизации Fearless SIMD не станет ненужной, поскольку стандартная библиотека реализует лишь базовый минимум, а мультиверсионирование и работа с шириной вектора под конкретное железо остаются на усмотрение экосистемных библиотек. После стабилизации std::simd проект планирует перейти на неё внутри себя, чтобы убрать часть собственного кода.
По данным автора, Fearless SIMD уже используется как прямая зависимость в 30 других библиотеках (crates) и опосредованно, более чем в тысяче. Какие именно это библиотеки, в посте не уточняется.
Ключевые факты
- Fearless SIMD 1.0 и сопутствующая библиотека fearless_simd_macros v0.1 вышли 22 сентября 2026 года спустя 8 лет разработки от первого прототипа
- Библиотека даёт безопасные SIMD-абстракции для Rust без ad-hoc unsafe-кода, в отличие от аналогов, где, по словам автора, находятся тысячи unsafe-блоков
- Безопасность достигается за счёт макроса kernel! и двух компактных модулей безопасной трансформации памяти, которые единственные требуют ручного аудита
- Новый макрос #[simd] из fearless_simd_macros v0.1 избавляет от ручной настройки инлайнинга при мультиверсионировании функций
- Проект обещает 3 года обновлений безопасности для v1.0 и всех последующих версий; уже используется в 30 библиотеках напрямую и более чем в тысяче опосредованно
Почему это важно
SIMD-код (одновременная обработка нескольких значений одной инструкцией процессора) традиционно требует небезопасных блоков кода в Rust, что повышает риск ошибок памяти. Fearless SIMD сводит этот риск к аудиту всего двух небольших модулей вместо тысяч unsafe-блоков, которые характерны для аналогичных библиотек, это меняет то, насколько безопасно можно писать высокопроизводительный код на Rust.
Кому это важно
В первую очередь разработчикам на Rust, которые пишут производительные вычислительные библиотеки, обработку изображений, кодеки, математические и графические движки. Проект уже выступает зависимостью для 30 библиотек напрямую и более чем для тысячи опосредованно, то есть затрагивает значительную часть экосистемы Rust.
Как это применить
Библиотека доступна как обычный crate для проектов на Rust; для подключения достаточно добавить зависимость и при желании воспользоваться новым макросом #[simd] из fearless_simd_macros для упрощённого мультиверсионирования функций. Разработчики также могут по-прежнему писать код без макроса, автор гарантирует, что оба подхода будут работать бессрочно. Автор проекта обещает поддержку безопасности в течение 3 лет для версии 1.0 и всех последующих релизов.
Можно ли доверять
Материал, авторский блог-пост разработчика библиотеки (автор под ником Shnatsel), а не независимый обзор, поэтому оценки производительности и безопасности даны со стороны самого проекта без сторонних тестов или конкретных цифр бенчмарков. Цифры об использовании (30 прямых и более тысячи опосредованных зависимостей) также приведены автором без указания источника подсчёта.
Риски и подводные камни
В посте не приводятся конкретные показатели производительности или тесты, подтверждающие заявления об отсутствии "потолка" быстродействия, это качественные утверждения автора. Эргономика библиотеки (работа с макросом #[simd]) автор сам называет областью, которая ещё может меняться, хотя ядро библиотеки заявлено стабильным. Сроки стабилизации std::simd в самом Rust, на которую опирается часть долгосрочных планов проекта, в источнике не указаны.
«Благодаря безопасному доступу к intrinsics, потолка производительности не существует.»
— Shnatsel, автор блог-поста