Pystd es una biblioteca estándar para C++ escrita desde cero con un objetivo muy concreto: minimizar el tiempo de compilación. Su autor, tras ver rechazadas varias propuestas de charla en conferencias, decidió publicarla como entrada de blog.
El problema de fondo es conocido: incluir una sola cabecera de la biblioteca estándar de C++ dispara los tiempos de compilación. Por ejemplo, #include genera 80.000 líneas tras el preprocesado, y #include, 65.000. El autor ilustra el coste con un caso real: compilar un «Hola, mundo» en C lleva unas centésimas de segundo, mientras que en C++23 con #include se necesita entre uno y 2,3 segundos, según se activen o no las optimizaciones. La penalización escala de forma aproximadamente lineal.
Pystd aborda el problema con tres prioridades de diseño: tiempo de compilación, simplicidad de implementación y rendimiento. El proyecto suma unas 6.500 líneas de cabeceras y 5.600 de código fuente, frente a las casi 30.000 líneas que ocupa std::vector tras expandir. Construir la biblioteca completa y sus pruebas en un solo núcleo lleva unos 4 segundos, y 1,9 segundos con los 16 núcleos.
En cuanto a funcionalidad, ofrece contenedores (vector, string, hash map, ordered map con B-tree), algoritmos de ordenación, utilidades (optional, expected, variant, unique_ptr) y módulos equivalentes a argparse, pathlib, expresiones regulares y tempfile de Python, entre otros. Al integrarse en CapyPDF, los tiempos de compilación cayeron alrededor del 80%, el binario sin strip se redujo un 75% y el rendimiento en ejecución mejoró un 25%.
Para evitar regresiones, Pystd fija un presupuesto de tiempo: cualquier cabecera pública debe compilar en un máximo de 0,15 segundos, un límite que debe cumplirse incluso en una Raspberry Pi. El código está disponible en GitHub, funciona en Linux y macOS, y aún no es compatible con MSVC porque depende de pack indexing.
