Las dos facciones de C++: inercia del comité frente a presión por seguridad

Fuentes: The two factions of C++

El lenguaje C++ atraviesa una fractura interna entre dos formas incompatibles de entender su evolución. Por un lado, el Evolution Working Group (EWG) de WG21 alcanzó consenso con el documento P3466 R0 para reafirmar los principios de diseño del lenguaje: ningún cambio de ABI, mantenimiento de la compatibilidad de enlace con C y con C++ anterior, rechazo de anotaciones 'virales' como las de lifetimes, y la coexistencia de objetivos contradictorios —preservar el ABI y, a la vez, sostener el principio de cero sobrecosto. Se trata, en la práctica, de una ratificación de la trayectoria actual del lenguaje.

Por otro lado, diversas instancias del Gobierno de Estados Unidos —la CISA, la NSA y la Oficina del Director Cibernético Nacional de la Casa Blanca— han publicado documentos que recomiendan a la industria abandonar las memorias no seguras, categoría en la que incluyen a C++. Grandes tecnológicas responden a esa presión: Microsoft reescribe bibliotecas núcleo en Rust, Google apuesta por Rust en Android y desarrolla una herramienta de interoperabilidad bidireccional C++/Rust llamada Crubit, y AWS también utiliza Rust de forma intensiva. Google, además, redujo su participación en WG21 tras la llamada 'votación ABI de Praga' —que descartó romper el ABI en C++23— y trabaja en Carbon, un lenguaje sucesor cuyo repositorio documenta las dificultades de mejorar C++ desde dentro.

A este cuadro se suman la salida de Herb Sutter de Microsoft, el retraso de MSVC en implementar C++23, los módulos aún sin desplegar completamente, un estado confuso de los 'Safety Profiles' (P3081R0) sin implementación, y relatos recurrentes de contribuciones ciudadanas al comité que terminan frustradas. El texto sostiene que el conflicto es estructural: coexisten grandes corporaciones tecnológicamente capaces —con refactorizado automatizado sobre más de cien millones de líneas de C++ en veinte minutos, como señala la biografía de Chandler Carruth— con bases de código legacy donde ni siquiera se admite configurar un linter. Mientras el comité protege el código existente, una parte de la industria busca la salida fuera del lenguaje.