CBQN, el compilador principal del lenguaje de programación BQN, logra tiempos de ejecución muy inferiores a los de C++ y Rust en algoritmos que manipulan cadenas formadas exclusivamente por los caracteres '0' y '1', según un análisis técnico publicado en el repositorio de GitHub "max-odd-binary". La ventaja no procede de un único factor, sino de la acumulación de varias decisiones de diseño en el intérprete.
La clave reside en que CBQN representa los vectores booleanos como secuencias de bits empaquetados: un bit por elemento en lugar de un byte, de modo que un array de 1.000 booleanos ocupa 125 bytes (16 palabras de 64 bits) frente a los 1.000 bytes de std::vector de C++ o Vec de Rust. Cualquier operación posterior trabaja automáticamente sobre 64 elementos por palabra de máquina, una aceleración de 64 veces previa incluso al uso de instrucciones SIMD.
Además, el módulo Singeli genera código SIMD ajustado a mano para cada primitiva y lo compila a vectores nativos AVX2, SSE o NEON, sin depender del autovectorizador del compilador. Las operaciones se fusionan: un compare-to-bits realiza la comparación y el empaquetado en una sola pasada, mediante movemask de x86, en lugar de comparar bytes y luego reducir a bits. El sistema también dispone de algoritmos especializados por tipo de dato: ordenar booleanos se reduce a contar unos con popcount y rellenar con memset, y ordenar caracteres de un byte sigue un counting sort O(n) en lugar de un sort genérico O(n log n). A ello se suma un asignador de memoria tipo buddy optimizado para cargas de arrays y rutas de código distintas según el tamaño del dato (menor de 16, de 256, de 32.768, etc.).
El artículo contrasta estas técnicas con tres implementaciones en C++ y Rust: una basada en std::ranges::partition, otra con std::sort sobre la cadena de bytes y una tercera que cuenta los unos y reconstruye el resultado. En todos los casos, CBQN realiza entre 50 y 100 instrucciones reales sobre datos que caben en la caché L1, acercando el rendimiento al de un único memcpy.
