- El sueño de un C++ único sin dialectos parece haberse desvanecido hace mucho tiempo
- Hay mucho debate sobre el futuro de C++ en Reddit, ese sitio web naranja (HN) y en las reuniones oficiales del comité de estandarización de C++
Estado actual de C++
- El Evolution Working Group (EWG) de C++ acordó adoptar P3466 R0.
- Mantiene la compatibilidad de enlace con C y con versiones anteriores de C++ sin romper la ABI (interfaz binaria de aplicación).
- No usa “anotaciones virales”.
- Sigue aferrándose a objetivos en conflicto: no romper la ABI y el principio de cero sobrecarga.
- El gobierno de Estados Unidos recomienda dejar de usar C++.
- Varias entidades como CISA, la NSA y la Casa Blanca han publicado advertencias sobre el uso de lenguajes inseguros en memoria.
- Las grandes tecnológicas están adoptando Rust.
- Microsoft, Google y AWS, entre otras, ya usan Rust.
- Google incluso desarrolló herramientas de interoperabilidad entre C++ y Rust
- Conflictos internos dentro de la comunidad de C++
- Se comenta que Herb Sutter dejó Microsoft y que MSVC avanza lentamente en la implementación de funciones de C++23.
- Google está reduciendo su participación en el proceso de desarrollo de C++ y trabaja en su propio lenguaje sucesor de C++.
- Falta de confianza en el proceso actual del comité de estandarización de C++
- La funcionalidad de módulos sigue incompleta
- Los “Safety Profiles” están en una situación extraña
Las dos culturas de C++
- Grupo moderno con uso de herramientas automatizadas
- Las grandes tecnológicas como Google son el ejemplo principal
- Usan estándares recientes de C++ (C++17 o superior), con soporte de herramientas automatizadas de compilación y pruebas
- Invierten en mantener la calidad del código y modernizan continuamente su base de código
- Grupo de C++ legado
- Bases de código que operan en entornos y herramientas antiguos
- Funcionan sin código fuente o con sistemas de compilación obsoletos
- El costo de mantenimiento es alto y las barreras para modernizar son grandes
- La diferencia principal está en las herramientas y los procesos
- El grupo de C++ moderno depende de sistemas de compilación integrados y de herramientas como analizadores estáticos, formateadores y linters
- El grupo legado tiene baja eficiencia operativa por la ausencia de estas herramientas y procesos
Resultados e impacto
- Safety Profiles
- Buscan reforzar la seguridad sin modificar el código legado existente
- Se enfocan más en mantener el código existente que en las necesidades del C++ moderno
- Módulos
- Fueron diseñados para permitir importar archivos de encabezado como módulos de forma sencilla
- Se diseñaron teniendo en cuenta la compatibilidad con código legado
- La división de la comunidad de C++
- La falta de coincidencia entre las necesidades de los grupos moderno y legado profundiza los conflictos dentro de la comunidad
- El enfoque conservador del comité de estandarización de C++ parece ser un intento de aliviar esos conflictos
Perspectiva alternativa
- Ideas alternativas como Safe C++ no están siendo bien recibidas dentro de la comunidad
- También existe la crítica de que algunos miembros del comité de estandarización se aferran a criterios estéticos personales y se resisten al cambio
3 comentarios
Rust todavía no tiene un ecosistema para desarrollo de GUI, así que no lo he podido adoptar.
Ojalá salga un buen framework de GUI para Rust...
No sé si Rust podrá reemplazar a C++,
pero sí es cierto que casi no se ven proyectos nuevos en C++...
Parece que el comité de C++ decidió que lo correcto es priorizar más sus valores originales que una transformación radical.
Comentarios de Hacker News
El código C++ de Google a menudo no funciona en las versiones más recientes, y muchas veces los desarrolladores no tienen intención de corregirlo. Esto se debe a que el código de Google se ha quedado en un punto intermedio entre lo antiguo y lo moderno
Aconseja a quienes trabajan en el estándar de C++ que apoyen la dirección actual de C++ e ignoren el ruido que aparece en línea sobre el futuro de C++
Sostiene que el único grupo que seguirá usando C++ será el que tenga bases de código heredadas demasiado grandes como para refactorizarlas
Considera que el sistema de ediciones de Rust funciona muy bien
Le preocupa que la salida de Herb Sutter de Microsoft tenga un impacto negativo para Microsoft
std::span, una propuesta de Microsoft, fue adoptada sin la verificación de límites, y sostiene que hacía falta el esfuerzo de HerbEnfatiza que las pruebas automatizadas son el factor principal que separa a los dos bandos
Afirma que el principal factor que ha reducido el atractivo de C++ ha sido la ausencia de módulos
Compara que Herb Sutter era hábil para lograr compromisos, mientras que Google empujó su propia agenda
Menciona que los clientes con bases de código a gran escala no quieren cambiar ni el 1% de su código para cumplir reglas estrictas
Explica que también existen varias facciones en Python y en Javascript/Node/Typescript