10 puntos por GN⁺ 2024-11-26 | 3 comentarios | Compartir por WhatsApp
  • 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

 
aer0700 2024-11-27

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...

 
ndrgrd 2024-11-26

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.

 
GN⁺ 2024-11-26
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

    • El código C++ de Google puede provocar corrupción de memoria debido a máquinas de estado y punteros débiles manuales
    • Ve de forma positiva que Google se aleje del ecosistema de C++
    • Cree que el interés de Google en el ecosistema de Rust no será algo positivo
  • 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++

    • Recomienda a quienes quieren verificación estática de tiempos de vida que usen Rust
    • Sugiere usar Rust si se trabaja como contratista del gobierno
    • Afirma que el proceso de desarrollo existente de C++ está funcionando bien
  • Sostiene que el único grupo que seguirá usando C++ será el que tenga bases de código heredadas demasiado grandes como para refactorizarlas

    • Otros grupos que perdieron la confianza en WG21 se están moviendo a nuevos lenguajes
    • Menciona que Herb Sutter dijo que agregar anotaciones de lifetime a C++ crearía una "rampa de salida" hacia otros lenguajes
  • Considera que el sistema de ediciones de Rust funciona muy bien

    • Propone que, si se introdujera un sistema así en C++, aunque podría haber limitaciones en los límites de los módulos, podría ser una forma de satisfacer a ambos bandos
  • Le preocupa que la salida de Herb Sutter de Microsoft tenga un impacto negativo para Microsoft

    • Valora que Herb impulsó la adopción del estándar de C++ y trabajó por una mejor visión de futuro
    • Menciona que std::span, una propuesta de Microsoft, fue adoptada sin la verificación de límites, y sostiene que hacía falta el esfuerzo de Herb
  • Enfatiza que las pruebas automatizadas son el factor principal que separa a los dos bandos

    • Explica que, en apps C++ heredadas, si no hay pruebas automatizadas, cambiar el código implica el riesgo de romper la aplicación
    • Advierte que, por la naturaleza de C++, incluso cambios de código que parecen inofensivos pueden causar problemas
  • Afirma que el principal factor que ha reducido el atractivo de C++ ha sido la ausencia de módulos

    • Evalúa que, si hubieran existido módulos, podría haberse formado una comunidad de C++
  • 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

    • Afirma que muchas empresas están invirtiendo tiempo en actualizarse a nuevos estándares
  • Explica que también existen varias facciones en Python y en Javascript/Node/Typescript

    • Evalúa que Rust intentó evitar esas facciones, pero a cambio elevó la curva de aprendizaje
    • Menciona que Go intentó prevenir las facciones y lograr una adopción amplia, pero aun así tuvo que introducir genéricos