Bibliotecas C++ sensatas
Un nuevo proyecto, “Sane C++ Libraries”, pretende ofrecer un ecosistema alternativo y ligero para C++ sin STL, con tiempos de compilación más rápidos, abstracciones más simples y utilidades prácticas como E/S asíncrona, JSON y reflexión. Los comentaristas están divididos: algunos celebran el enfoque minimalista, el manejo explícito de errores y la evitación de excepciones, RTTI y punteros inteligentes, mientras que otros argumentan que despreciar la biblioteca estándar empeora la fragmentación y sacrifica componentes maduros y bien optimizados. El intercambio pone de relieve tensiones de larga data en C++ entre rendimiento, simplicidad, portabilidad y dependencia de la biblioteca estándar frente a bases personalizadas o de terceros.
Objetivos generales y posicionamiento
- La biblioteca aspira a modelar un “mundo C++ alternativo” más parecido a Python/Node/Zig/C: funcionalidad práctica, E/S asíncrona, abstracción de plataforma, binarios más pequeños, sin excepciones/RTTI/stdlib.
- El autor enfatiza la diversión, la simplicidad y centrarse en el “95% de los casos de uso” en lugar de cada caso límite.
- Algunos lo ven como un punto intermedio entre el C inseguro y el libstdc++ recargado; otros consideran que “sin stdlib / sin excepciones / atomics personalizados” no es, por definición, “sensato”.
Evitación de la stdlib y fragmentación del ecosistema
- Varios comentaristas objetan que ignorar la STL garantiza más fragmentación y peor interoperabilidad; ya les cuesta lidiar con cada biblioteca C++ definiendo sus propios tipos
String/Vector. - Otros sostienen que STL tiene lastre de diseño y compatibilidad (por ejemplo,
vector<bool>, mapas estándar,std::regex, plantillas pesadas, compilaciones de depuración lentas) y que muchos proyectos serios ya implementan su propia biblioteca central. - Comparación con Abseil: Abseil complementa la STL, mientras que este proyecto intenta reemplazarla en su mayor parte.
Contenedores, algoritmos y estructuras de datos
- Se considera que el conjunto actual de contenedores está incompleto; la falta de conjuntos, colas, deques y hash maps de estilo estándar es un bloqueo para algunos.
- Algunos usuarios dependen mucho de stack/deque; el autor es escéptico respecto al deque y prefiere soluciones basadas en vector y contenedores al estilo arena.
- La biblioteca de “algoritmos” muestra actualmente
bubbleSorten primer lugar; esto provocó críticas, y el autor aclaró que es un marcador de posición y que se ampliará con el tiempo.
Gestión de memoria, punteros inteligentes y excepciones
- El proyecto omite deliberadamente
SharedPtr/UniquePtr, basándose en un principio contra muchos pequeños objetos en heap y contra la propiedad compartida o poco clara. - Algunos discrepan firmemente, quieren punteros inteligentes para todos los objetos en heap y los ven como herramientas de seguridad de sobrecoste cero o bajo.
- Otros describen patrones que usan vectores/arenas, handles y grupos de propiedad claros en lugar de punteros inteligentes.
- Debate mayor: muchos comentaristas defienden C++ sin excepciones (a menudo con tipos estilo
ErrorOr) como algo común y práctico; otros insisten en que C++ “no puede ser libre de excepciones” en ningún sentido significativo, argumentando que todo manejo de errores sigue siendo “excepciones disfrazadas”. - Entre las preocupaciones sobre las excepciones de C++ se incluyen coste no nulo, RTTI, flujo de control oculto, comportamiento de lanzamiento poco claro a partir de las firmas de función y el fomento de código centrado solo en el “happy path”.
Atomics y cuestiones de bajo nivel
- Los atomics personalizados son cuestionados dado que
std::atomicestá profundamente ligado al modelo de memoria de C++. - La regla de no usar stdlib es la razón inmediata; el autor insinúa un posible indicador futuro opcional para usar encabezados estándar donde estén disponibles.
Sistema de compilación y macros
- Se critica que describir compilaciones en C++ no sea “sensato”; los argumentos a favor de lo declarativo citan escalabilidad y simplicidad.
- El autor responde que herramientas “declarativas” populares (por ejemplo, CMake) en realidad son DSLs imperativos.
- A algunos les disgusta el uso de macros del proyecto por no ser “sensato”; el autor señala que la mayoría de las macros son cambios de plataforma, con macros opcionales en reflection.