- Un documental que resume en una sola pieza los 40 años de historia de C++, desde los inicios en Bell Labs hasta su adopción global y su crecimiento actual, con la participación de personas que formaron parte de la historia, la estandarización y el ecosistema de herramientas de C++
- C++ nació a partir de C with Classes, creado por Bjarne Stroustrup en Bell Labs para combinar el control de hardware de C con la abstracción orientada a objetos de Simula, y creció hasta convertirse en un lenguaje de abstracciones eficientes para sistemas de gran escala
- La implementación inicial, CFront, convertía C++ a código C para permitir usar intacta la infraestructura y las bibliotecas existentes de C, y a medida que crecieron los usuarios después de 1983, la compatibilidad pasó a ser un reto clave
- La estandarización ANSI/ISO, iniciada por la presión de IBM, HP y Sun, evitó la fragmentación entre implementaciones de distintos vendors, y el estándar de 1997 incluyó namespace, exception, template y STL
- A comienzos de los 2000 llegó el invierno de C++ con Java y C#, el colapso puntocom y el rápido aumento del rendimiento de CPU, pero hacia 2004 el fin del escalado de frecuencia y la importancia de la paralelización impulsaron un renacimiento con C++11
- Hoy C++ se usa en CERN, videojuegos, finanzas, IA y HPC basadas en CUDA, sistemas embebidos y más, mientras que la seguridad de memoria, la complejidad, el tamaño del comité de estándares y la falta de financiamiento siguen siendo desafíos importantes
C with Classes, nacido en Bell Labs
- C++ es un lenguaje con más de 40 años y, cuando se creó por primera vez, no existían herramientas como editores avanzados, resaltado de sintaxis, navegación de código, autocompletado o refactorización, y muchos desarrolladores usaban BASIC o ensamblador distinto para cada chip
- En una época en la que se necesitaban programas cada vez más grandes y complejos, Bjarne Stroustrup intentaba construir sistemas distribuidos en Bell Labs, y para manejar elementos como controladores de dispositivos, interfaces de red, administradores de memoria y procesos, necesitaba un lenguaje de bajo nivel
- C ofrecía control total sobre el hardware y era adecuado para programación de sistemas, pero a medida que los programas crecían se quedaba corto para expresar estructuras como módulos, canales de comunicación y protocolos
- A Stroustrup le gustaban la fuerte seguridad de tipos, los tipos definidos por el usuario, las clases y las jerarquías de clases de Simula, que había usado en Cambridge, pero consideraba que Simula era demasiado lento y consumía demasiada memoria
- Por eso creó C with Classes agregando a C las funciones básicas de Simula, y durante casi 40 años después hizo evolucionar C++ en la dirección de permitirle hacer todo lo que podían hacer Simula y C
CFront, el nombre y la expansión inicial
- C with Classes se creó al principio como una especie de preprocesador de C, y cuando otras personas empezaron a usarlo, Stroustrup concluyó que la diferencia con C no era suficiente, así que dedicó un año a mejorar el compilador y el lenguaje
- CFront no generaba código máquina con un backend tradicional, sino que compilaba a código C, lo que permitió a los usuarios de C++ mantener su entorno existente de C sin tener que adoptar desde cero nueva infraestructura o bibliotecas
- CFront fue creado en 1983 y era un compilador real que realizaba análisis léxico, análisis sintáctico, verificación de tipos, generación de representación en árbol y optimización de árboles
- El nombre C++ surgió del hecho de que el operador
++de C significa incremento; semánticamente++Csería más correcto, pero se eligió C++ por comodidad para índices y referencias - AT&T intentó vender compiladores de C++ al entrar al negocio de computadoras y software, pero no logró vender suficiente hardware, y las primeras implementaciones de C++ pudieron difundirse ampliamente en la práctica gracias al costo de cinta y a licencias comerciales muy bajas
- Durante un tiempo, Stroustrup se encargó él solo de la documentación, el compilador, la implementación del lenguaje y el help desk; la inversión de AT&T fue muy pequeña, y en una ocasión se asignaron 5,000 dólares para tres años de difusión de un lenguaje de programación de propósito general
- En CFront 2.0 se descubrió un bug en el manejo de herencia múltiple, y como una función central ya prometida podía romperse de una manera imposible de corregir una vez desplegada en campo, se preparó y distribuyó una versión corregida en pocos días
- Como había que mantener el mismo número de release, la versión se distribuyó como 2.0.0 en lugar de 2.0.1, y la compatibilidad se volvió una exigencia tan dominante que en broma la llamaban la “palabra con C”
Estandarización y STL
- C++ era una herramienta para elevar la productividad interna de AT&T, pero no podía triunfar como un lenguaje encerrado en una sola empresa: necesitaba desarrolladores externos y un ecosistema de bibliotecas
- Antes de la web, grupos como
comp.lang.c++en Usenet y revistas de computación como Byte eran las vías de difusión de información, y Stroustrup dio charlas en muchas empresas y organizaciones a finales de los 80 para dar a conocer el lenguaje - El uso creció sin campañas publicitarias ni un patrocinador fuerte, pero cuando varios vendors como Borland, Microsoft, IBM y Sun empezaron a crear cada uno su propia implementación de C++ y su propio diseño de templates, la compatibilidad de código se fragmentó gravemente
- Personas que representaban a IBM, HP y Sun pidieron a Stroustrup que iniciara la estandarización de C++ bajo las reglas de ANSI; él pensaba que era demasiado pronto, pero al final aceptó preparar un documento base para la estandarización un año después
- El Annotated Reference Manual, o ARM, se convirtió en el documento de entrada para la estandarización, y abrió el camino a incorporar funciones como templates, exceptions y namespaces
- El estándar se definió como un contrato entre quienes escriben código C++ y las implementaciones de C++, y pasó a ser el mecanismo para lograr que distintos vendors interpretaran el mismo código con el mismo significado
- La STL creada por Alexander Stepanov tenía como idea central hacer que los algoritmos funcionaran sobre cualquier estructura de datos aplicable y que distintas estructuras de datos pudieran llenarse mutuamente con información
- Antes de STL, cada quien hacía sus propios arrays, lists, trees, containers y algoritmos, pero STL propuso una sola manera poderosa de definir algoritmos y contenedores
- La propuesta de STL recibió oposición por haber llegado demasiado tarde y ser demasiado grande para el calendario de estandarización, y grandes empresas como Microsoft también se opusieron, pero tras presentaciones y discusiones cerca del 80% del comité votó a favor y entró en el estándar
- C++ se estandarizó en noviembre de 1997, y namespace, exception, template y la Standard Template Library se añadieron como funciones fundamentales
- LLVM nació después de esta estandarización, así que pudo usar las nuevas funciones de la manera prevista sin cargar con el costo de migrar código anterior
El invierno y el renacimiento con C++11
- En los 90, C++ se convirtió en el lenguaje que transformó el desarrollo centrado en Fortran dentro del software y la computación de física de altas energías en lugares como CERN, y bibliotecas y código existentes fueron porteados a C++ o rehechos para ajustarse a C++
- En el desarrollo de videojuegos, a medida que las tarjetas de video y las APIs asumieron el trabajo de bajo nivel, surgió una transición de C y ensamblador hacia C++, y C++ pasó a usarse en ecosistemas de motores como Unreal
- En finanzas, con la aparición del trading algorítmico y el high-frequency trading, la latencia a nivel de microsegundos se volvió crítica, y C++ se usó como un lenguaje capaz de lograr baja latencia sin tener que microoptimizar cada línea
- Con el colapso puntocom de 2000, Java emergió con el fuerte marketing de Sun como “el lenguaje del futuro” y “el lenguaje de internet”, y Java apareció como una reacción explícita a la complejidad de C++
- Dentro de Microsoft existía el deseo de combinar la facilidad del desarrollo basado en formularios de Visual Basic con el rendimiento y la expresividad de C++, y de ahí surgió C#
- Entre 2000 y 2005 no hubo solo un estancamiento, sino un declive de C++; como las frecuencias de CPU seguían aumentando, muchos diseñadores de lenguajes y desarrolladores empezaron a considerar menos importante el rendimiento
- Hacia 2004 terminó el escalado de frecuencia de los procesadores y se hicieron evidentes los límites de rendimiento y energía por núcleo, junto con los rendimientos decrecientes del paralelismo a nivel de instrucción, marcando el fin de la era en la que el hardware hacía que los programas fueran automáticamente más rápidos
- El multicore y la paralelización se volvieron importantes, pero en ese momento el estándar de C++ no tenía nada sobre threading, y el correo de Herb Sutter “C++ multi-threading: is the standardization committee listening” puso ese problema en primer plano
- C++0X comenzó en 2002 y apuntaba a completarse entre 2007 y 2009, pero siguió retrasándose para incorporar más funciones importantes y terminó tardando 13 años
- C++11 introdujo move semantics, concurrency,
auto, range-based for loop, smart pointer, lambda yconstexpr, y se convirtió en el primer estándar de la familia C en tratar oficialmente el threading - C++11 fue un renacimiento porque coincidieron la necesidad de exprimir al máximo el rendimiento del hardware y la llegada de funciones del lenguaje más fáciles y seguras
- Después se adoptó el train model para publicar estándares en tiempos fijos, y el comité eligió un ciclo de 3 años en lugar de uno de 2
- C++14 fue un release pequeño con lo que no alcanzó a entrar en C++11 y con correcciones de bugs, y en C++17 y C++23 se añadieron muchas funciones del lenguaje y de la biblioteca estándar
Escala actual y desafíos
- La complejidad de C++ ha seguido creciendo, y recibe críticas por tener varias formas de inicializar variables y por una complejidad descrita incluso como “difícil de entender”
- El comité de estándares también ha crecido hasta 527 miembros, y existe la preocupación de que ahora haya tantos comités y chairs como personas había en la composición completa al inicio
- En diseño de lenguajes casi siempre es posible agregar, pero casi imposible quitar, así que más importante que decidir qué entra es decidir cuándo decir que no
- C++ se usa en generación de energía, turbinas eólicas, arroceras, boliches, películas de Hollywood, automóviles, finanzas, cámaras y muchos otros lugares, al punto de describirse como “más o menos en todas partes”
- La base de código en C++ de HRT supera el millón de líneas y está compuesta por 15,000 archivos, y solo en 2025 unos 800 desarrolladores hicieron cerca de 84,000 commits
- En videojuegos, mientras Unity usa C#, Unreal usa C++, y juegos que necesitan alto frame rate y gráficos rápidos, como Call of Duty, usan C++ por velocidad
- C++ también es clave en Nvidia y en la computación acelerada; aunque en la superficie se use Python, la carga real de cómputo recae en bibliotecas CUDA altamente optimizadas
- Se mencionó a Rust y C++ como lenguajes de rápido crecimiento, y se presentaron cifras según las cuales los desarrolladores de C++ pasaron de 9.4 millones en 2022 a 16.3 millones en 2025
- La demanda de lenguajes donde importa la eficiencia energética en relación con el rendimiento sigue existiendo, por lo que C++ conserva casos de uso sobresalientes y difíciles de reemplazar
- Al mismo tiempo, existe la preocupación de que, a medida que los grandes actores se mueven hacia la IA, pueda reducirse el financiamiento para C++
- Durante la pandemia hubo movimientos en gobiernos y organismos reguladores para alejarse de C++, que por defecto no ofrece seguridad de memoria, y la seguridad de memoria se plantea como el problema más importante por resolver
- En C++26, para fortalecer el software, las variables no inicializadas dejarán de ser undefined behavior, y la biblioteca estándar de C++26 ofrecerá opciones de bounds safety para tipos comunes como
string,spanyvector - La static reflection de C++26 es una función que permite que el código del programa vea el código del programa, y se la evalúa como la función individual estandarizada de mayor impacto
- La conclusión es que la IA podría influir mucho en la seguridad de los lenguajes y en la forma de usar los lenguajes de programación, pero todavía no se sabe qué ocurrirá a partir de ahora
1 comentarios
Opiniones en Hacker News
Todavía me resuena la crítica de Ken Thompson de que C++ es un montón inconsistente y complejo de ideas. La última vez que lo usé profesionalmente fue con C++98, y 11/17/20 apenas los toqué un poco por curiosidad
Si c++/cfront no se hubiera colgado del prestigio de C, dudo que se hubiera usado tan ampliamente, y creo que ese punto era tanto su identidad como una limitación que C++ nunca intentó cambiar. Me irrita muchísimo dedicar un tiempo similar a sanear implementaciones con herramientas como Coverity/Valgrind para cosas que el compilador podría haber resuelto
En la época de C++98, con el libro de Bjarne sobre la estructura interna se podía entender bastante bien qué estaba pasando, pero después explotó casi como una industria toda la línea de libros tipo “effective, more effective, proficient, performant C++”, y hasta que aparecieron los LLM tuve que abandonar la idea de poder entender código existente escrito por otros. Me resultó más satisfactorio dedicar ese tiempo a aprender el dominio del problema
Aun así, como salen figuras que me gustan como Kernighan y Stepanov, sí pienso ver el documental
Le pregunté si hacía falta una licencia para crear un compilador de C++, o si debía llamarlo de otra forma en vez de C++, y se rió diciendo que hiciera lo que quisiera; también me agradeció y dijo que yo era la única persona de compiladores que había preguntado. Vi su obituario hace unos años; era buena persona
Compilar era dolorosamente lento y no soportaba punteros near/far, que eran indispensables para cualquier app no trivial. Zortech C++ resolvió esos problemas y se vendió como pan caliente, creando la masa crítica necesaria para el éxito de C++
El tráfico de comp.lang.c++ aumentó de golpe, y Borland, al ver nuestras ventas, abandonó su propio producto de lenguaje orientado a objetos y creó Turbo C++. Microsoft también hizo su propio C++ al ver el éxito de Borland
También le vendimos muchos compiladores Zortech C++ a Microsoft, y con eso desarrollaron COM. También escuché rumores de que Microsoft estaba haciendo su propio C orientado a objetos llamado C*, pero nunca lo confirmé
Una de las razones por las que el comité de C pudo resistirse durante tanto tiempo a agregar demasiadas cosas fue que podía señalar a C++ y decir “eso es asunto de ellos, no nuestro”. Sin C++, quién sabe si C habría terminado siendo algún lenguaje con clases, plantillas y lambdas
El C y UNIX que ellos hicieron también vencieron a sistemas más avanzados de LISP y Smalltalk, precisamente porque su implementación era más simple. Incluso su propio sistema operativo más avanzado basado en Plan 9 no logró desplazar a los sistemas tipo Unix, que estaban más extendidos
Al final, parece que siempre ganan la capacidad de distribución y lo “suficientemente bueno”. Creo que lenguajes dinámicos como Perl, Python, Ruby, JavaScript y PHP, junto con Java fuertemente impulsado por marketing, ofrecieron funciones de alto nivel suficientemente buenas como para que la gente no se fuera a Lisp o Smalltalk
Desde esa perspectiva, C++ pudo haber sido el medio para montar funciones de alto nivel sobre un lenguaje de bajo nivel y alto rendimiento ya ampliamente adoptado, convirtiéndolo en una tecnología lo bastante buena para una adopción masiva
Últimamente trabajo mucho con C++, así que decidí ver el video mientras esperaba que terminara el build. La duración me quedó perfecta y, por suerte, el video también estuvo muy bueno
Personalmente, C++ es el lenguaje más elegante que he usado en unos 15 años. Si eres del tipo “sistematizador” y quieres tener un modelo mental extremadamente preciso, hasta el último bit, de lo que escribiste, no hay nada como C++
Reconozco las limitaciones e incertidumbres que vienen del compilador y demás, pero aun así lo creo
Tienes todo el derecho de disfrutar trabajar con C++, y es cierto que se puede lograr mucho con él, pero probablemente no haya demasiada discusión en que C++ no lo consigue con “muy poco”
Me da gusto que Andrei Alexandrescu esté incluido en este documental. Su Modern C++ Design fue un libro que me abrió muchísimo la mente cuando lo leí, y probablemente todavía pueda hacerlo. ¿Alguien lo ha leído?
Recomiendo resumir cada capítulo con un chatbot de IA y preguntarle cuáles serían sus equivalentes modernos. Algunos modismos ya fueron mejorados, y una sección completa parecía reemplazable por el uso de std::variant y std::visit
C++ debería desaparecer. Entiendo que mucha gente ha invertido en él y que una enorme cantidad de código está escrita en C++. Antes era fan y todavía es mi lenguaje principal de trabajo, pero en 2026, con LLMs capaces de encontrar todas las vulnerabilidades y con más atacantes, necesitamos lenguajes donde la seguridad sea la opción por defecto
C++ es un lenguaje donde, para obtener seguridad, hay que activarla de forma opcional y mantenerse en alerta extrema. No funciona, y décadas de experiencia lo demuestran
shared_ptr, también mostró cuánto puede cambiar un lenguajeAdoptó casi todas las ideas, y así aprendimos qué funciona y qué no funciona en el campo de batalla. Podemos conservar RAII, la distinción entre mover y copiar, los smart pointers,
placement-newy los genéricosEn cambio, se pueden desechar
auto_ptr, la copia por defecto, cierta forma de implementar excepciones, la herencia virtual múltiple y las plantillas que reemplazan bloques enteros de código. En mi opinión, la pelea ya terminó, y Rust es el mejor resultado de ordenar las cosas que sí funcionaron. Que también haya heredado los tiempos de compilación es un extraMe sorprende que el flujo de desarrollo en C++ siga vigente. Cuando un juego o programa está hecho en C++, normalmente da gusto porque el rendimiento suele estar bastante garantizado, pero si me dijeran que lo use directamente, creo que me pondría a llorar
Hay demasiado que memorizar y los estándares son demasiado variados. Si voy a mantener un proyecto y resulta ser C++, me desanimo de inmediato. Simplemente es demasiado difícil. Me encanta cuando alguien más lo escribe, pero no es un lenguaje que quiera usar yo mismo
Con cualquier lenguaje hace falta un calentamiento parecido, así que para mí no es muy distinto de usar Python, Go o Java
Si lo miras sin la biblioteca estándar, C++ está más o menos bien
El principal problema del ecosistema de C++ es que todo el mundo talla su propio subconjunto del lenguaje. Así que no hay un solo ecosistema, sino varios ecosistemas con estilos incompatibles y distintos subconjuntos del lenguaje o de la biblioteca estándar. Esto hace que la reutilización de código mediante bibliotecas sea mucho más difícil de lo necesario
[0] https://hftuniversity.com/post/the-c-standard-library-has-be...
La gran ventaja de ese conjunto tan amplio es que C++ permite usar buenas abstracciones desde muy bajo nivel hasta muy alto nivel. Puedes hacer cosas de bajo nivel como ensamblador en línea, operaciones de bits y manipulación directa de memoria, y también usarlo a un nivel tan alto que casi parece un lenguaje de scripting. Cualquiera que sea la exigencia del problema, C++ puede hacerse cargo
Además, por la información de tu perfil, si no estás en Corea del Norte, te convendría agregarle un cero a tu tarifa. Así conseguirías clientes más duraderos y de mejor calidad
Vivir como programador de C++ se siente exactamente así
Cada vez que enseño a desarrolladores web, les digo que el lenguaje de internet no es JavaScript sino C++. Los desarrolladores web no son más que usuarios jugando dentro de programas hechos por desarrolladores de C++
Qué sería el lenguaje de internet es bastante menos claro
Un documental gratuito sobre un tema que me apasiona siempre es algo muy bueno. Gracias
Eso sí, soy algo raro: no puedo ver documentales hechos con gente diciendo frases cortas una tras otra. Entiendo la intención de “dejar que cuenten la historia”, pero como me distrae, necesito un narrador que me diga qué pensar
Aun así, les mando cariño a los creadores
Me perdí un poco la tendencia, pero hace poco hubo documentales sobre Python, Clojure y probablemente otros lenguajes. ¿Es una serie hecha por la misma gente sobre varios lenguajes? ¿Es coincidencia? ¿O ahora todos los lenguajes de programación están corriendo a hacer su propio documental en video?
Parece que hacen documentales sobre software de código abierto
Chandler Carruth tiene una reflexión interesante sobre este tema: https://hachyderm.io/@chandlerc/116694268329657881
Recién en los últimos 10 minutos tocaron un poco críticas comunes como la complejidad creciente o la seguridad de memoria. Aun así, lo disfruté