Разработчики привыкли воспринимать язык C как эталон скорости, особенно когда речь идёт о базовых библиотеках, таких как zlib. Однако мир меняется, и Rust доказывает это наглядно — новая библиотека zlib-rs официально стала быстрее традиционного C-шного zlib!
🔥 Что случилось?
Команда проекта zlib-rs опубликовала свежие результаты бенчмарков и заявила, что теперь их Rust-реализация zlib стала самой быстрой среди API-совместимых библиотек для декомпрессии, обойдя даже оптимизированные версии zlib-ng и chromium-zlib. Чем важна эта новость?
Zlib — это, без преувеличения, «невидимый герой» интернета: почти весь веб использует zlib-компрессию в HTTP, в архивах и при передаче данных. Оптимизация этой библиотеки, даже незначительная, способна сэкономить миллионы долларов на серверах и дать серьёзный выигрыш в скорости.
🛠️ Технические подробности: почему Rust оказался быстрее C?
Добиться такого результата команде удалось благодаря нескольким факторам:
- 🚀 Использование SIMD-инструкций
zlib-rs активно задействует SIMD-инструкции современных процессоров, что позволяет обрабатывать несколько байтов одновременно. Команда тщательно поработала над так называемым «мультиверсионированием» кода, чтобы библиотека могла на лету выбирать оптимальный путь выполнения в зависимости от процессора пользователя. - 🎛️ DFA-оптимизация в LLVM
Rust-компилятор по умолчанию не всегда эффективно компилировал код конечных автоматов, особенно при небольших блоках данных. Но благодаря рекомендации Никиты Попова (одного из ключевых разработчиков LLVM), было предложено использовать оптимизацию -Cllvm-args=-enable-dfa-jump-thread, что позволило значительно ускорить обработку коротких данных.
📊 Что говорят тесты?
Результаты замеров показали убедительное преимущество Rust-версии:
- 🥇 Zlib-rs быстрее zlib-ng во всех значимых сценариях декомпрессии, выигрывая до 13% в реальных ситуациях. Особенно заметно преимущество на блоках данных среднего размера (от 512 байт и выше), которые чаще всего встречаются на практике.
- 🎯 В сравнении с оптимизированной версией zlib из проекта Chromium, Rust тоже уверенно лидирует в большинстве сценариев.
Компрессия данных пока даёт смешанные результаты, но и здесь zlib-rs показывает значительный прогресс. К примеру, на высоком уровне сжатия библиотека уже обходит zlib-ng на целых 13%.
⚙️ Технические детали реализации
Авторы zlib-rs решили не просто переписать zlib на Rust, а полностью переосмыслить подход к обработке данных:
- 🚦 Мультиверсионирование кода (multiversioning) — позволяет библиотеке выбирать путь исполнения с учётом инструкций процессора (AVX, SSE и т.д.), что экономит драгоценные наносекунды.
- ⚙️ Минимизация проверок в рантайме — при запуске zlib-rs лишь единожды определяет возможности CPU, а далее действует по оптимальной стратегии.
- 🔬 Постоянный мониторинг производительности — команда создала специальную панель мониторинга, которая позволяет следить за регрессиями и отслеживать прогресс библиотеки в режиме реального времени.
💬 Личное мнение автора статьи
Мне кажется, что победа zlib-rs над C-версией zlib — это очередной важный шаг к тому, чтобы Rust перестал восприниматься только как безопасный язык. Rust уже давно показывает, что безопасность и производительность вовсе не взаимоисключающие понятия, и случай с zlib-rs это прекрасно доказывает.
Кроме того, этот кейс подталкивает задуматься и о более широкой тенденции: Rust, возможно, станет стандартом для низкоуровневых библиотек в ближайшие годы. Когда открытый код на Rust обгоняет оптимизированные C-реализации, у разработчиков появляется стимул переходить на более безопасные и современные решения.
🔮 Что дальше?
У zlib-rs огромный потенциал, и я уверен, в ближайшее время мы увидим её внедрение во многих крупных проектах. Важна не только скорость, но и устойчивость к ошибкам, удобство поддержки и интеграция с экосистемой Rust, которая активно растёт.
Также стоит отметить, что разработчики из Trifecta Tech Foundation не останавливаются на достигнутом — уже готовится новая версия и оптимизации на уровне LLVM, которые сделают Rust-реализацию zlib ещё быстрее.
🔗 Полезные ссылки и ресурсы:
Rust уверенно занимает свою нишу, и победа zlib-rs — яркое подтверждение того, что будущее за современными и безопасными языками программирования.