Библиотека форматирования C++ — быстрая и типобезопасная альтернатива C stdio и iostreams с поддержкой C++20 std::format.
ashvardanian/StringZilla
Библиотека строк для C, C++, Python, Rust, JavaScript, Go и других языков, ускоряющая поиск, хеширование, сортировку и вычисление редакционного расстояния с помощью SIMD и SWAR.
- Звёзды
- 3,574
- Форки
- 145
- Открытые issues
- 33
- Последний коммит
- 11 часов назад
Что это?
StringZilla — библиотека для обработки текста, использующая инструкции SIMD и SWAR процессора для ускорения распространённых операций со строками: поиска подстрок и символов из заданного набора, хеширования, сортировки, вычисления расстояния Левенштейна и оценок выравнивания, а также Unicode-преобразования регистра и сегментации. Она задумана как дополнение, которое можно использовать вместо стандартных API: например, у Python str.find, C strstr и C++ std::string::find есть прямые аналоги в StringZilla.
Ядро библиотеки — C-библиотека в одном заголовочном файле с обёрткой для C++, а биндинги доступны для Python, Rust, JavaScript, Swift, Go, C# и Java. Второй слой, StringZillas, добавляет параллельные бэкенды для CPU и CUDA GPU, предназначенные для пакетного вычисления редакционных расстояний, оценок выравнивания и скользящих отпечатков. В проект также входят хеш-функция на основе инструкций AES и реализации SHA-256, использующие аппаратные расширения SHA, если они доступны.
Библиотека рассчитана на x86, Arm, RISC-V, PowerPC и WebAssembly и стремится быть переносимой между системами с разным порядком байтов, разрядностью и операционными системами. Зрелость функций зависит от биндинга; некоторые функции Unicode в проекте всё ещё находятся в активной разработке.
Ключевые возможности
- 01Поиск подстрок и символов из заданного набора, ускоренный инструкциями SIMD и SWAR.
- 02Хеширование с помощью 64-битной функции на основе AES и аппаратно ускоренного SHA-256.
- 03Сортировка строковых коллекций и пересечение множеств.
- 04Расстояния Левенштейна и Нидлмана — Вунша с пакетным выполнением на GPU через CUDA.
- 05Преобразование регистра Unicode, обработка UTF-8 и сегментация по TR29.
- 06Биндинги для C, C++, Python, Rust, JavaScript, Swift, Go, C# и Java.
Сценарии использования
- Ускорение конвейеров обработки данных с большим объёмом текста, например при разборе крупных корпусов.
- Замена медленных вызовов поиска подстроки или хеширования в сервисах, чувствительных к производительности.
- Пакетное вычисление редакционных расстояний или оценок выравнивания для задач биоинформатики или поиска.
- Ускорение операций типа LIKE, ORDER BY и GROUP BY внутри движка базы данных.
Быстрый старт
- 1
Установите пакет Python
pip install stringzilla - 2
Используйте его в Python вместо str
Что важно знать
- Не все функции доступны во всех языковых биндингах.
- Некоторые функции Unicode (нормализация, сегментация и обнаружение разрывов строк) всё ещё отмечены как находящиеся в разработке.
Темы
Частые вопросы
- Что такое StringZilla?
- Библиотека строк для C, C++, Python, Rust, JavaScript, Go и других языков, ускоряющая поиск, хеширование, сортировку и вычисление редакционного расстояния с помощью SIMD и SWAR. StringZilla — библиотека для обработки текста, использующая инструкции SIMD и SWAR процессора для ускорения распространённых операций со строками: поиска подстрок и символов из заданного набора, хеширования, сортировки, вычисления расстояния Левенштейна и оценок выравнивания, а также Unicode-преобразования регистра и сегментации. Она задумана как дополнение, которое можно использовать вместо стандартных API: например, у Python str.find, C strstr и C++ std::string::find есть прямые аналоги в StringZilla.
- StringZilla можно использовать бесплатно? Какая у него лицензия?
- StringZilla распространяется с открытым исходным кодом под лицензией Apache-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- StringZilla всё ещё поддерживается?
- Активно поддерживается. Последний коммит в StringZilla — 22 окт. 2026 г..
- Для чего можно использовать StringZilla?
- Ускорение конвейеров обработки данных с большим объёмом текста, например при разборе крупных корпусов. Замена медленных вызовов поиска подстроки или хеширования в сервисах, чувствительных к производительности. Пакетное вычисление редакционных расстояний или оценок выравнивания для задач биоинформатики или поиска. Ускорение операций типа LIKE, ORDER BY и GROUP BY внутри движка базы данных.
- Как установить StringZilla?
- Установите пакет Python: pip install stringzilla Используйте его в Python вместо str
- Где скачать StringZilla?
- Исходный код и инструкции по установке — на GitHub: https://github.com/ashvardanian/StringZilla
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
Парсер JSON на C++, использующий SIMD-инструкции для обработки гигабайтов JSON в секунду с полной проверкой данных.
Открытый фреймворк для компиляции моделей машинного обучения: он позволяет настраивать конвейеры компилятора на Python и развёртывать модели на разных аппаратных платформах.
Библиотека Python для глубокого сравнения вложенных объектов, поиска по ним, хеширования содержимого и хранения и применения различий в виде дельт.
Фреймворк для терминальных интерфейсов на Go на основе Elm Architecture: корректная работа с Unicode, встроенный и полноэкранный рендеринг, библиотека компонентов.
Быстрый SIMD-оптимизированный CLI-инструмент и библиотека для Node.js: сравнивает изображения попиксельно и создаёт diff-файл.