Una biblioteca de formato para C++ rápida y segura en cuanto a tipos, alternativa a C stdio e iostreams, que implementa std::format de C++20.
ashvardanian/StringZilla
Biblioteca de cadenas acelerada con SIMD y SWAR para C, C++, Python, Rust, JavaScript, Go y más; incluye búsqueda, hashing, ordenamiento y distancias de edición.
- Estrellas
- 3,574
- Forks
- 145
- Issues abiertos
- 33
- Último commit
- hace 12 horas
¿Qué es?
StringZilla es una biblioteca de procesamiento de texto que utiliza instrucciones de CPU SIMD y SWAR para acelerar operaciones comunes con cadenas, como la búsqueda de subcadenas y conjuntos de caracteres, el hashing, el ordenamiento, el cálculo de distancias de Levenshtein y puntuaciones de alineamiento, y el plegado de mayúsculas y minúsculas y la segmentación Unicode. Está diseñada para complementar directamente las API estándar: por ejemplo, str.find de Python, strstr de C y std::string::find de C++ tienen equivalentes directos en StringZilla.
El núcleo es una biblioteca C de un solo encabezado con un wrapper de C++, y ofrece bindings para Python, Rust, JavaScript, Swift, Go, C# y Java. Una segunda capa, StringZillas, añade backends paralelos para CPU y GPU CUDA para calcular distancias de edición por lotes, puntuaciones de alineamiento y huellas digitales rodantes. El proyecto también incluye una función hash basada en instrucciones AES e implementaciones de SHA-256 que aprovechan las extensiones SHA del hardware cuando están disponibles.
La biblioteca es compatible con x86, Arm, RISC-V, PowerPC y WebAssembly, y busca ser portable entre distintas convenciones de endianness, tamaños de palabra y sistemas operativos. El grado de madurez varía según el binding, y el proyecto indica que algunas funciones Unicode aún están en desarrollo activo.
Funciones clave
- 01Búsqueda de subcadenas y conjuntos de caracteres acelerada con instrucciones SIMD y SWAR.
- 02Hashing con una función de 64 bits basada en AES y SHA-256 acelerado por hardware.
- 03Ordenamiento e intersección de conjuntos de colecciones de cadenas.
- 04Distancias de Levenshtein y Needleman-Wunsch, con ejecución por lotes en GPU mediante CUDA.
- 05Plegado de mayúsculas y minúsculas en Unicode, manejo de UTF-8 y segmentación TR29.
- 06Bindings para C, C++, Python, Rust, JavaScript, Swift, Go, C# y Java.
Casos de uso
- Acelerar pipelines de datos con un uso intensivo de texto que procesan corpus grandes.
- Reemplazar llamadas lentas de búsqueda de subcadenas o hashing en servicios sensibles al rendimiento.
- Calcular por lotes distancias de edición o puntuaciones de alineamiento para cargas de trabajo de bioinformática o búsqueda.
- Acelerar operaciones de tipo LIKE, ORDER BY y GROUP BY dentro de un motor de base de datos.
Inicio rápido
- 1
Instala el paquete de Python
pip install stringzilla - 2
Úsalo desde Python en lugar de str
Antes de usarlo
- No todas las funciones están disponibles en todos los bindings de lenguaje.
- Varias funciones de Unicode (normalización, segmentación y detección de saltos de línea) aún se consideran en desarrollo.
Temas
Preguntas frecuentes
- ¿Qué es StringZilla?
- Biblioteca de cadenas acelerada con SIMD y SWAR para C, C++, Python, Rust, JavaScript, Go y más; incluye búsqueda, hashing, ordenamiento y distancias de edición. StringZilla es una biblioteca de procesamiento de texto que utiliza instrucciones de CPU SIMD y SWAR para acelerar operaciones comunes con cadenas, como la búsqueda de subcadenas y conjuntos de caracteres, el hashing, el ordenamiento, el cálculo de distancias de Levenshtein y puntuaciones de alineamiento, y el plegado de mayúsculas y minúsculas y la segmentación Unicode. Está diseñada para complementar directamente las API estándar: por ejemplo, str.find de Python, strstr de C y std::string::find de C++ tienen equivalentes directos en StringZilla.
- ¿StringZilla es gratuito? ¿Qué licencia tiene?
- StringZilla es open source bajo la licencia Apache-2.0. Revisa los términos de la licencia antes de usarlo en productos comerciales.
- ¿StringZilla sigue mantenido?
- Mantenimiento activo. El último commit de StringZilla fue el 22 oct 2026.
- ¿Para qué puedo usar StringZilla?
- Acelerar pipelines de datos con un uso intensivo de texto que procesan corpus grandes. Reemplazar llamadas lentas de búsqueda de subcadenas o hashing en servicios sensibles al rendimiento. Calcular por lotes distancias de edición o puntuaciones de alineamiento para cargas de trabajo de bioinformática o búsqueda. Acelerar operaciones de tipo LIKE, ORDER BY y GROUP BY dentro de un motor de base de datos.
- ¿Cómo se instala StringZilla?
- Instala el paquete de Python: pip install stringzilla Úsalo desde Python en lugar de str
- ¿Dónde consigo StringZilla?
- El código fuente y las instrucciones de instalación están en GitHub: https://github.com/ashvardanian/StringZilla
Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.
Proyectos relacionados
Un parser JSON para C++ que usa instrucciones SIMD para procesar gigabytes de JSON por segundo con validación completa.
Un framework abierto de compilación de machine learning que permite personalizar pipelines de compilación en Python y desplegar modelos en distintos tipos de hardware.
Biblioteca de Python para comparar objetos anidados, buscar en ellos, generar hashes basados en su contenido y guardar y aplicar diferencias como deltas.
Framework de Go para interfaces de terminal basado en Elm Architecture, con diseño compatible con Unicode, renderizado en línea o a pantalla completa y una biblioteca de componentes.
Herramienta de línea de comandos rápida y optimizada con SIMD, y biblioteca Node.js, para comparar imágenes píxel a píxel y generar una imagen de diferencias.