El creador de C++ rebate la advertencia de la Casa Blanca
Seguridad de C++ vs. directrices
- Muchos sostienen que C++ sigue siendo fundamentalmente inseguro: las “directrices” de seguridad son opcionales, se aplican de forma desigual y son difíciles de adaptar al código existente.
- Otros dicen que C++ puede ser “lo bastante seguro” con una disciplina estricta: subconjuntos limitados de características, punteros inteligentes, semántica de valores, sanitizers, el máximo de advertencias y linters alineados con las directrices principales.
- Varios señalan que las funciones más nuevas (por ejemplo,
string_view, iteradores) también son fáciles de usar mal y pueden introducir errores sutiles de ciclo de vida.
Debates de rendimiento (C++ frente a otros)
- Un sector afirma que Java moderno y otros lenguajes gestionados a menudo igualan o superan el rendimiento “del mundo real” de C++, especialmente cuando los proyectos típicos en C++ carecen de configuraciones avanzadas de compilación/optimización (PGO, LTO, etc.).
- Los opositores replican que los ámbitos de alto rendimiento (IA/ML, HPC, cargas de trabajo GPU) dependen abrumadoramente de C/C++, y que las restricciones de Java/GC lo hacen inadecuado en esos extremos.
- Algunos subrayan que C++ solo gana de forma fiable cuando expertos gestionan de manera agresiva el diseño de memoria, la asignación y el comportamiento de la caché: un esfuerzo que la mayoría de las bases de código nunca ve.
Bases de código C++ del mundo real
- Se hace una distinción entre el “C++ moderno idealizado” y el código desordenado, heredado y de estilo mixto que domina la industria.
- Los sistemas antiguos de la era C++03 se consideran especialmente difíciles de evolucionar con seguridad; unas pocas empresas de élite lo consiguen, pero muchas otras han fracasado o han migrado.
- Incluso en código “moderno”, quienes contribuyen reportan fallos por peculiaridades de la biblioteca estándar, invalidación de iteradores y UB sutil que el compilador no detecta.
Rust y alternativas seguras para la memoria
- Muchos ven Rust (y en menor medida Go, Java, Swift, etc.) como claramente más seguro por construcción, eliminando grandes clases de errores de memoria.
- Otros argumentan que la brecha de seguridad entre un C++ bien escrito y Rust es pequeña, enfatizando los propios bloques
unsafede Rust y su dependencia de bibliotecas C. - Se plantean preocupaciones sobre el “coloring” asíncrono de Rust, la madurez del ecosistema y el uso intensivo de crates de terceros (riesgos de cadena de suministro y complejidad).
Orientación gubernamental y respuesta
- Algunos ven el impulso de la Casa Blanca para alejarse de C/C++ como un reconocimiento tardío de que décadas de problemas de seguridad de memoria muestran que el lenguaje en sí es un problema central.
- Otros enfatizan el pragmatismo: C++ está profundamente arraigado (SO, navegadores, robótica, finanzas, embebidos), no puede simplemente abandonarse y debe hacerse más seguro mediante herramientas y perfiles.
- Existe escepticismo sobre que las propuestas de seguridad en curso para C++ (perfiles, “C++ v2”) lleguen o se adopten lo bastante rápido frente a simplemente elegir Rust u otros lenguajes más seguros para proyectos nuevos.