- Um documentário que resume em uma única obra os 40 anos de história do C++, desde o início no Bell Labs até a adoção global e o crescimento atual, com a participação de pessoas que estiveram envolvidas na história do C++, na padronização e no ecossistema de ferramentas
- C++ começou como C with Classes, criado por Bjarne Stroustrup no Bell Labs para combinar o controle de hardware do C com a abstração orientada a objetos do Simula, e cresceu como uma linguagem de abstração eficiente para sistemas de grande porte
- A implementação inicial, CFront, convertia C++ em código C, permitindo usar a infraestrutura e as bibliotecas existentes de C sem mudanças, e à medida que os usuários aumentaram após 1983, compatibilidade se tornou um desafio central
- A padronização ANSI/ISO, iniciada sob pressão de IBM, HP e Sun, impediu a fragmentação entre implementações de diferentes fornecedores, e o padrão de 1997 incluiu namespace, exception, template e STL
- No começo dos anos 2000, Java e C#, o estouro da bolha ponto-com e o rápido aumento do desempenho das CPUs trouxeram o inverno do C++, mas por volta de 2004 a escalabilidade de frequência parou, o paralelismo se tornou crucial e o C++11 criou um renascimento
- Hoje, o C++ é usado no CERN, em jogos, finanças, IA e HPC com CUDA, sistemas embarcados e muito mais, enquanto segurança de memória, complexidade, tamanho do comitê de padronização e falta de financiamento continuam sendo desafios centrais
C with Classes, nascido no Bell Labs
- O C++ é uma linguagem com mais de 40 anos e, quando foi criada, não existiam ferramentas como editor com recursos modernos, destaque de sintaxe, navegação de código, autocompletar ou refatoração, e muitos desenvolvedores usavam BASIC ou assembly diferente para cada chip
- Em uma época em que programas maiores e mais complexos estavam se tornando necessários, Bjarne Stroustrup tentou construir sistemas distribuídos no Bell Labs, e para lidar com elementos como drivers de dispositivo, interfaces de rede, gerenciadores de memória e processos era necessário uma linguagem de baixo nível
- O C permitia controle total do hardware e era adequado para programação de sistemas, mas à medida que os programas cresciam, faltavam meios para expressar estruturas como módulos, canais de comunicação e protocolos
- Stroustrup gostava da forte segurança de tipos do Simula, dos tipos definidos pelo usuário, classes e hierarquias de classes, que havia usado em Cambridge, mas considerava que o Simula era lento demais e consumia muita memória
- Por isso, criou o C with Classes colocando os recursos básicos do Simula dentro do C e, ao longo de quase 40 anos, o C++ evoluiu na direção de conseguir fazer tudo o que Simula e C podiam fazer
CFront, o nome e a expansão inicial
- O C with Classes foi criado inicialmente na forma de um pré-processador de C e, quando outras pessoas começaram a usá-lo, Stroustrup concluiu que a diferença em relação ao C ainda não era suficiente e investiu um ano em melhorar o compilador e a linguagem
- O CFront não gerava código de máquina com um backend tradicional; ele compilava para código C, permitindo que usuários de C++ mantivessem o ambiente C existente sem precisar adotar uma nova infraestrutura ou novas bibliotecas por completo
- O CFront foi criado em 1983 e era um compilador de fato, realizando análise léxica, análise sintática, verificação de tipos, geração de representação em árvore e otimização da árvore
- O nome C++ veio do fato de que o operador
++em C significa incremento; semanticamente++Cfaria mais sentido, mas C++ foi escolhido por conveniência de indexação e referência - A AT&T tentou vender compiladores C++ ao entrar no negócio de computadores e software, mas o hardware não vendeu o suficiente, e as implementações iniciais de C++ puderam na prática ser distribuídas amplamente por causa do custo de fita e de taxas comerciais muito baixas
- Por um tempo, Stroustrup cuidou sozinho da documentação, do compilador, da implementação da linguagem e do help desk, e o investimento da AT&T era muito pequeno; em certa ocasião, foram destinados US$ 5.000 para três anos de difusão de uma linguagem de programação de uso geral
- No CFront 2.0 foi encontrado um bug no tratamento de herança múltipla, e como um recurso central já prometido poderia quebrar de um jeito impossível de corrigir depois de chegar ao campo, uma versão corrigida foi produzida e distribuída em poucos dias
- Como era preciso manter o mesmo número de release, a versão foi distribuída como 2.0.0 em vez de 2.0.1, e compatibilidade se tornou uma exigência tão dominante que era chamada em tom de piada de “a palavra com C”
Padronização e STL
- O C++ era uma ferramenta para aumentar a produtividade dentro da AT&T, mas não poderia ter sucesso se ficasse preso a uma única empresa; eram necessários desenvolvedores externos e um ecossistema de bibliotecas
- Antes da web, grupos como
comp.lang.c++na Usenet e revistas de informática como Byte eram os canais de disseminação de informação, e Stroustrup divulgava a linguagem com palestras em várias empresas e organizações no fim dos anos 1980 - O uso cresceu sem campanhas publicitárias ou um grande patrocinador, mas vários fornecedores como Borland, Microsoft, IBM e Sun criaram suas próprias implementações de C++ e seus próprios designs de template, o que fragmentou seriamente a compatibilidade do código
- Representantes de IBM, HP e Sun pediram a Stroustrup a padronização do C++ sob as regras da ANSI, e Stroustrup considerava isso cedo demais, mas acabou decidindo um ano depois criar um documento-base para a padronização
- O Annotated Reference Manual, ou ARM, tornou-se o documento de entrada para a padronização, abrindo caminho para recursos como template, exception e namespace
- O padrão foi definido como um contrato entre quem escreve código C++ e a implementação de C++, tornando-se o mecanismo que faz diferentes fornecedores aceitarem o mesmo código com o mesmo significado
- A STL, criada por Alexander Stepanov, tinha como ideia central fazer algoritmos funcionarem sobre todas as estruturas de dados aplicáveis e permitir que essas estruturas pudessem alimentar umas às outras com dados
- Antes da STL, cada um criava seu próprio modo de lidar com array, list, tree, container e algoritmos, mas a STL apresentou uma única forma poderosa de definir algoritmos e containers
- A proposta da STL enfrentou oposição por ser grande demais e ter chegado tarde demais para o cronograma da padronização, e grandes empresas como a Microsoft também se opuseram, mas após apresentações e discussões cerca de 80% do comitê votou a favor e ela entrou no padrão
- O C++ foi padronizado em novembro de 1997, e namespace, exception, template e a Standard Template Library foram adicionados como recursos básicos centrais
- O LLVM começou depois dessa padronização, então pôde usar os novos recursos da forma pretendida sem o peso de migrar código anterior
O inverno e o renascimento do C++11
- Nos anos 1990, o C++ se tornou uma linguagem que mudou o desenvolvimento centrado em Fortran em áreas como software e computação de física de altas energias no CERN, e bibliotecas e códigos existentes foram portados para C++ ou refeitos para C++
- No desenvolvimento de jogos, à medida que placas de vídeo e APIs assumiram o trabalho de baixo nível, surgiu um movimento de subida de C e assembly para C++, e o C++ passou a ser usado em ecossistemas de engines como a Unreal
- Em finanças, com o surgimento do trading algorítmico e do high-frequency trading, a latência em microssegundos se tornou importante, e o C++ passou a ser usado como linguagem capaz de alcançar baixa latência sem exigir micro-otimização linha por linha
- Com o estouro da bolha ponto-com em 2000, Java ascendeu com o forte marketing da Sun como “a linguagem do futuro” e “a linguagem da internet”, e Java surgiu como uma reação explícita à complexidade do C++
- Dentro da Microsoft, havia o desejo de combinar o desenvolvimento fácil baseado em formulários do Visual Basic com o desempenho e a expressividade do C++, e disso nasceu o C#
- Entre 2000 e 2005 não houve apenas estagnação, mas um declínio do C++; como a frequência das CPUs continuava aumentando, muitos designers de linguagens e desenvolvedores passaram a considerar desempenho algo menos importante
- Por volta de 2004, a escalabilidade de frequência dos processadores terminou, apareceram os limites de desempenho e energia de um único núcleo e os ganhos marginais do paralelismo em nível de instrução diminuíram, encerrando a era em que o hardware acelerava automaticamente os programas
- Multicore e paralelismo se tornaram importantes, mas o padrão C++ da época não tinha nenhum suporte a threading, e o e-mail de Herb Sutter “C++ multi-threading: is the standardization committee listening” destacou esse problema
- O C++0X começou em 2002 e tinha como meta ser concluído entre 2007 e 2009, mas foi sendo adiado repetidamente para incluir mais recursos importantes e acabou levando 13 anos
- O C++11 introduziu move semantics, concurrency,
auto, range-based for loop, smart pointer, lambda econstexpr, tornando-se o primeiro padrão da família de linguagens C a tratar oficialmente de threading - O C++11 foi um renascimento, com a combinação entre recursos de linguagem mais fáceis e seguros e a necessidade de extrair o máximo do desempenho do hardware
- Depois disso, foi adotado o train model para lançar padrões em datas definidas, e o comitê escolheu um ciclo de três anos em vez de dois
- O C++14 foi um release pequeno com o que não entrou no C++11 e correções de bugs, e C++17 e C++23 adicionaram muitos recursos à linguagem e à biblioteca padrão
Escala e desafios atuais
- A complexidade do C++ continuou crescendo, e a linguagem recebeu críticas por ter várias formas de inicializar variáveis e por uma “complexidade difícil de entender”
- O comitê de padronização também cresceu e chegou a 527 membros, levantando a preocupação de que hoje existam tantos comitês e presidentes quanto havia membros no início
- No design da linguagem, adicionar é possível, mas remover é quase impossível, então a questão importante muitas vezes deixa de ser o que incluir e passa a ser quando dizer não
- O C++ é usado em geração de energia, turbinas eólicas, panelas elétricas de arroz, pistas de boliche, filmes de Hollywood, automóveis, finanças, câmeras e muitos outros lugares, levando à expressão de que ele está “praticamente em todo lugar”
- A base de código C++ da HRT tem mais de 1 milhão de linhas e 15.000 arquivos, e somente em 2025 cerca de 800 desenvolvedores fizeram 84.000 commits
- Em jogos, enquanto a Unity usa C#, a Unreal usa C++, e jogos como Call of Duty, que exigem alta taxa de quadros e gráficos rápidos, usam C++ por causa da velocidade
- Na Nvidia e na computação acelerada, o C++ também é importante, e mesmo quando Python aparece na superfície, a carga real de computação é assumida por bibliotecas CUDA altamente otimizadas
- Rust e C++ foram apontadas como linguagens em rápido crescimento, e foi apresentado o número de que os desenvolvedores de C++ aumentaram de 9,4 milhões em 2022 para 16,3 milhões em 2025
- A demanda por linguagens em que eficiência energética em relação ao desempenho é importante continua, e o C++ mantém casos de uso excelentes e difíceis de substituir
- Ao mesmo tempo, existe a preocupação de que o financiamento para C++ possa diminuir à medida que grandes players migram para IA
- Durante a pandemia, governos e órgãos reguladores passaram a se mover para longe do C++, que não oferece segurança de memória por padrão, e a segurança de memória é apresentada como o problema mais importante a resolver
- No C++26, para fortalecer o software, variáveis não inicializadas deixarão de ser undefined behavior, e a biblioteca padrão do C++26 oferecerá opções de bounds safety para tipos comuns como
string,spanevector - O static reflection do C++26 é um recurso que permite ao código do programa ver o próprio código do programa, e é avaliado como o recurso único padronizado de maior impacto
- A conclusão é que a IA pode ter grande influência sobre a segurança das linguagens e sobre a forma de usar linguagens de programação, mas ainda não se sabe o que exatamente acontecerá daqui para frente
1 comentários
Comentários do Hacker News
Ainda me marca a crítica de Ken Thompson chamando C++ de um amontoado inconsistente e complexo de ideias. A última vez que usei C++ profissionalmente foi no C++98, e 11/17/20 eu só mexi um pouco por curiosidade
Se
c++/cfrontnão tivesse pegado carona no prestígio de C, duvido que teria sido tão amplamente usado, e acho que isso era ao mesmo tempo sua identidade e uma limitação que o C++ nunca tentou mudar. É muito irritante gastar um tempo parecido limpando implementações com ferramentas como Coverity/Valgrind para resolver coisas que o compilador poderia ter tratadoNa época do C++98, dava para entender razoavelmente bem o que estava acontecendo com os livros do Bjarne sobre a estrutura interna, mas depois disso os livros do tipo “effective, more effective, proficient, performant C++” cresceram como uma indústria, e até o surgimento dos LLMs eu já tinha desistido de esperar que fosse possível entender código legado escrito por outras pessoas. Foi mais satisfatório gastar esse tempo aprendendo o domínio do problema
Mesmo assim, pretendo ver o documentário porque aparecem figuras de que gosto, como Kernighan e Stepanov
Perguntei se eu precisaria de licença para fazer um compilador C++ e se deveria chamar a linguagem por outro nome que não C++, e ele riu e disse para eu fazer como quisesse. Também agradeceu, dizendo que eu fui a única pessoa de compiladores que tinha pedido permissão. Vi o obituário dele alguns anos atrás; era uma boa pessoa
cfrontera praticamente inútil no DOSA compilação era dolorosamente lenta e ele não suportava ponteiros near/far, que eram indispensáveis para aplicativos minimamente complexos. O Zortech C++ resolveu esses problemas e vendeu muito, criando a massa crítica necessária para o sucesso do C++
O tráfego em
comp.lang.c++disparou, e a Borland viu nossas vendas, abandonou seu próprio produto de linguagem orientada a objetos e criou o Turbo C++. A Microsoft também viu o sucesso da Borland e fez seu próprio C++Também vendemos muitos compiladores Zortech C++ para a Microsoft, e eles desenvolveram o COM com ele. Também ouvi rumores de que a Microsoft estava criando seu próprio C orientado a objetos chamado C*, mas nunca confirmei isso
Um dos motivos de o comitê de C ter conseguido resistir por tanto tempo sem adicionar muita coisa foi poder apontar para o C++ e dizer “isso é problema deles, não nosso”. Sem C++, não dá para saber se C teria virado alguma linguagem com classes, templates e lambdas
O C e o UNIX que eles criaram também venceram sistemas mais avançados em LISP e Smalltalk, porque eram mais simples de implementar. Nem mesmo o sistema operacional deles baseado em Plan 9, mais avançado, conseguiu superar os sistemas tipo Unix que se espalharam mais
No fim, capacidade de distribuição e “bom o suficiente” parecem sempre vencer. Acho que linguagens dinâmicas como Perl, Python, Ruby, JavaScript e PHP, junto com o Java fortemente promovido por marketing, ofereceram recursos de alto nível bons o suficiente para impedir que as pessoas migrassem para Lisp e Smalltalk
Sob essa perspectiva, o C++ pode ter sido o meio de adicionar recursos de alto nível a uma linguagem de baixo nível e alto desempenho já amplamente adotada, tornando-a tecnologia boa o suficiente para uma adoção massiva
Trabalho bastante com C++ hoje em dia, então resolvi ver o vídeo enquanto esperava o build terminar. A duração caiu como uma luva, e felizmente o vídeo também foi muito bom
Pessoalmente, C++ é a linguagem mais elegante que já usei em uns 15 anos. Se você é do tipo “sistematizador” e quer ter um modelo mental extremamente preciso, até o último bit, sobre aquilo que escreveu, não há nada como C++
Reconheço as limitações e incertezas vindas de compiladores e afins, mas ainda assim penso isso
Você tem todo o direito de gostar de trabalhar com C++ e é verdade que dá para alcançar muita coisa com ela, mas dificilmente há controvérsia na ideia de que C++ não faz isso com “muito pouco”
Fico feliz que este documentário inclua Andrei Alexandrescu. Modern C++ Design foi um livro que expandiu muito meu jeito de pensar quando li, e talvez ainda faça isso hoje. Alguém aqui já leu?
Recomendo resumir cada capítulo com um chatbot de IA e perguntar quais seriam os equivalentes modernos. Alguns idioms já foram melhorados, e uma seção inteira parecia ter sido substituída pelo uso de
std::variantestd::visitO C++ precisa desaparecer. Entendo que muita gente investiu nisso e que uma quantidade enorme de código foi escrita em C++. Eu era fã antes e ainda é a minha principal linguagem de trabalho, mas em 2026, numa situação em que LLMs conseguem encontrar todas as vulnerabilidades e os atacantes também estão aumentando, precisamos de linguagens em que segurança seja o padrão
C++ é uma linguagem em que, para obter segurança, você precisa ativá-la de forma opcional e com vigilância extrema. Isso não funciona, e décadas de experiência provam isso
shared_ptrno C++11, o quanto uma linguagem pode mudar profundamenteAceitou praticamente todas as ideias, e passamos a saber o que funciona e o que não funciona em campo. RAII, a distinção entre mover e copiar, ponteiros inteligentes, placement-new e genéricos podem ficar
Em contrapartida,
auto_ptr, cópia padrão, certas formas de implementar exceções, herança virtual múltipla e templates que substituem blocos inteiros de código podem ir embora. Na minha opinião, a disputa acabou, e Rust é o resultado que melhor organizou o que funcionou. Herdar até o tempo de compilação foi um bônusSurpreende que o fluxo de desenvolvimento em C++ continue. Quando um jogo ou programa é feito em C++, normalmente é bom porque o desempenho tende a estar garantido, mas se me pedirem para usar C++ diretamente, acho que vou chorar
Tem coisa demais para decorar e os padrões são variados demais. Se o projeto que vou manter é em C++, eu já desanimo na hora. É simplesmente difícil demais. Gosto quando outra pessoa escreve, mas não é uma linguagem que eu queira usar diretamente
Um aquecimento parecido é necessário em qualquer linguagem, então para mim não é tão diferente de usar Python, Go ou Java
Sem a biblioteca padrão, C++ fica até razoavelmente aceitável
O principal problema do ecossistema de C++ é que todo mundo esculpe o seu próprio subconjunto da linguagem. Então, em vez de um único ecossistema, existem vários ecossistemas com estilos conflitantes e subconjuntos conflitantes da linguagem/biblioteca padrão. Isso faz com que o reuso de código via bibliotecas seja mais difícil do que precisava ser
[0] https://hftuniversity.com/post/the-c-standard-library-has-be...
A grande vantagem desse conjunto amplo de recursos é que o C++ permite usar boas abstrações desde o nível mais baixo até o mais alto. Dá para usar inline assembly, operações de bits e manipulação direta de memória no baixo nível, e também dá para usá-lo de forma bem mais alta, quase como uma linguagem de script. Seja o que for que o domínio do problema exija, C++ dá conta
Além disso, vendo as informações do perfil, a menos que você esteja na Coreia do Norte, seria melhor colocar mais um zero no valor cobrado. Assim você consegue clientes mais duradouros e com maior foco em qualidade
Viver como programador de C++ é exatamente essa sensação
Sempre que ensino desenvolvedores web, digo que a linguagem da internet não é JavaScript, e sim C++. Desenvolvedores web são apenas usuários brincando dentro de programas feitos por desenvolvedores de C++
Qual é a linguagem da internet é algo bem menos claro
Documentários gratuitos sobre temas pelos quais sou apaixonado são realmente ótimos. Obrigado
Só que eu sou um pouco peculiar: não consigo assistir documentários feitos com pessoas falando em frases curtas costuradas umas nas outras. Entendo a intenção de “deixar que eles contem a história”, mas isso me distrai, então preciso de um narrador dizendo no que pensar
Ainda assim, mando carinho para os criadores
Eu estava por fora do que anda acontecendo, mas recentemente houve documentários sobre Python, Clojure e talvez outras linguagens também. É a mesma turma fazendo uma série sobre várias linguagens? É coincidência? Ou agora toda linguagem de programação está correndo para fazer seu próprio documentário em vídeo?
Pelo visto fazem documentários sobre software de código aberto
Há uma reflexão interessante do Chandler Carruth sobre esse tema: https://hachyderm.io/@chandlerc/116694268329657881
Só nos 10 minutos finais eles tocaram um pouco em críticas comuns, como a complexidade crescente e a segurança de memória. Ainda assim, gostei de assistir