08.10.2026 · Signal Titans Editorial
Bjarne Stroustrup recusou escolher entre abstração e velocidade

Quando Bjarne Stroustrup chegou aos Bell Labs em 1979, levou consigo um problema que ainda parece atual para engenheiros de software: o modelo de programação que torna um sistema mais fácil de entender nem sempre é aquele que o faz executar rápido o suficiente. Ele havia usado Simula em trabalhos sobre sistemas distribuídos e valorizava suas classes e sua capacidade de organizar programas complexos. Ao mesmo tempo, queria a eficiência, a portabilidade e o controle de baixo nível de C. Em vez de aceitar essa escolha, começou um experimento que primeiro chamou de “C with Classes”.
A restrição veio antes da linguagem
Stroustrup não começou com um manifesto para substituir C. Sua tarefa inicial estava ligada à distribuição de recursos de sistema operacional por uma rede. A pergunta prática era como descrever um sistema complicado com abstrações mais fortes sem pagar uma penalidade de desempenho que inviabilizasse o uso em software de sistemas. C já possuía compiladores, programadores, sistemas operacionais e uma cultura de eficiência próxima da máquina. Simula oferecia uma maneira melhor de estruturar programas. A nova linguagem precisava herdar os dois mundos.
Por isso, dizer que C++ é apenas “C com sintaxe orientada a objetos” perde o ponto central. Nos relatos do próprio Stroustrup, aparece um objetivo mais profundo: escrever programas eficientes e elegantes ao mesmo tempo. Compatibilidade, abstrações sem custo desnecessário e implementação prática eram pressões fundamentais desde o início.
“C with Classes” foi uma ponte utilizável
A primeira implementação usava um pré-processador que traduzia as novas construções de classes para C. Depois, Stroustrup escreveu o Cfront, um front end de compilador mais completo, capaz de fazer análise sintática e semântica e gerar C como saída. Isso permitia experimentar as ideias dentro do ecossistema existente dos Bell Labs e testá-las em projetos reais sem exigir que toda a infraestrutura de compilação fosse reconstruída do zero.
No começo dos anos 1980, a comunidade de usuários havia crescido o suficiente para transformar a manutenção de “C with Classes” em um peso para um projeto de pesquisa conduzido por uma única pessoa. Stroustrup mais tarde descreveu a escolha: abandonar a experiência ou transformá-la em uma linguagem mais flexível e expressiva. Ele escolheu a segunda opção. O nome C++ surgiu nessa fase, e a primeira versão comercial chegou em 1985, no mesmo ano da primeira edição de The C++ Programming Language.
Abstração sem abandonar a máquina
C++ ganhou verificação de tipos mais forte, classes, construtores, sobrecarga de operadores, funções virtuais e, mais tarde, templates e uma ampla biblioteca padrão. Mas a ideia mais duradoura era o acordo por trás dessas ferramentas: programadores deveriam conseguir criar abstrações de alto nível que fossem mapeadas de forma eficiente para o hardware. Uma abstração não deveria cobrar uma taxa oculta apenas por ser conveniente. Essa filosofia ajudou C++ a se tornar relevante em sistemas, gráficos, jogos, finanças, computação científica e outras áreas em que arquitetura e custo de execução importam ao mesmo tempo.
Esse acordo não é gratuito. C++ acumulou complexidade ao tentar preservar código antigo, permitir novos estilos e continuar adequado ao trabalho de baixo nível. As críticas ao tamanho da linguagem e às suas regras difíceis são legítimas. Porém, elas estão ligadas à mesma decisão histórica que deu longevidade à linguagem: C++ foi projetado para entrar em um mundo existente, não para exigir que esse mundo começasse de novo.
A padronização mudou quem definia a linguagem
À medida que C++ se espalhou para além dos Bell Labs, uma única implementação já não podia definir o idioma para sempre. O trabalho de padronização começou no fim dos anos 1980, e o primeiro padrão ISO C++ foi ratificado em 1998. O desenvolvimento passou a envolver um comitê internacional, vários compiladores, autores de bibliotecas e uma comunidade enorme. Stroustrup continuou influente, mas a linguagem se tornou maior do que qualquer roteiro individual.
Isso explica por que a evolução moderna de C++ costuma parecer uma negociação. Cada recurso novo precisa coexistir com décadas de código e com aplicações que vão de sistemas embarcados a grandes serviços de servidor. Perto de uma linguagem nova criada numa folha em branco, o processo parece conservador. Historicamente, porém, essa continuidade faz parte do problema de engenharia.
A lição duradoura é não escolher cedo demais
Em 2018, a National Academy of Engineering concedeu a Stroustrup o Charles Stark Draper Prize por conceber e desenvolver C++. O prêmio reconhece o impacto, mas a lição mais útil para programadores está na restrição original. Ele não aceitou a ideia de que abstrações legíveis e eficiência de máquina precisavam viver em linguagens separadas.
Hoje existem muitas respostas para a mesma tensão: runtimes gerenciados, sistemas de ownership, compiladores JIT, abstrações funcionais, linguagens de baixo nível mais seguras e aceleradores especializados. C++ não é a única resposta e nem sempre é a mais fácil. Sua importância histórica vem de mostrar que o design de linguagens pode tentar preservar várias restrições ao mesmo tempo. Às vezes, a inovação que dura não é um recurso isolado, mas a recusa em descartar um lado de uma troca difícil antes de o trabalho de engenharia ter sido realmente tentado.