- O sonho de um C++ único, sem dialetos, aparentemente já desapareceu há muito tempo
- Há muitos debates sobre o futuro do C++ no Reddit, naquele site laranja (HN) e nas reuniões oficiais do comitê de padronização do C++
Estado atual do C++
- O Evolution Working Group (EWG) do C++ concordou em adotar o P3466 R0.
- Mantém compatibilidade de link com C e com C++ antigo sem quebrar a ABI (Application Binary Interface).
- Não usa “anotações virais”.
- Insiste em objetivos conflitantes: não quebrar a ABI e o princípio de zero overhead.
- O governo dos EUA recomenda parar de usar C++.
- Órgãos como CISA, NSA e a Casa Branca publicaram alertas sobre o uso de linguagens sem segurança de memória.
- Grandes empresas de tecnologia estão adotando Rust.
- Microsoft, Google e AWS estão usando Rust.
- O Google chegou a desenvolver ferramentas de interoperabilidade entre C++ e Rust
- Há conflitos internos dentro da comunidade C++.
- Há notícias de que Herb Sutter deixou a Microsoft e de que o MSVC está lento para implementar recursos do C++23.
- O Google está reduzindo sua participação no processo de desenvolvimento do C++ e desenvolvendo sua própria linguagem sucessora do C++.
- Falta confiança no processo atual do comitê de padronização do C++
- O recurso de módulos ainda está incompleto
- Os 'Safety Profiles' estão em uma situação estranha
As duas culturas do C++
- Grupo moderno com uso de ferramentas automatizadas
- Grandes empresas de tecnologia, como o Google, são o principal exemplo
- Usa padrões recentes de C++ (C++17 ou superior), com suporte de ferramentas automatizadas de build e teste
- Investe na manutenção da qualidade do código e moderniza continuamente a base de código
- Grupo do C++ legado
- Bases de código que operam em ambientes e ferramentas antigos
- Funcionam sem código-fonte disponível ou com sistemas de build desatualizados
- O custo de manutenção é alto e as barreiras para modernização são grandes
- A principal diferença está em ferramentas e processos
- O grupo moderno de C++ depende de ferramentas como sistemas de build integrados, analisadores estáticos, formatadores e linters
- O grupo legado tem baixa eficiência operacional por causa da ausência dessas ferramentas e processos
Resultados e impactos
- Safety Profiles
- O objetivo é reforçar a segurança sem alterar o código legado existente
- O foco está mais em preservar código existente do que nas demandas do C++ moderno
- Módulos
- Foram projetados para permitir importar arquivos de cabeçalho como módulos de forma simples
- Foram concebidos levando em conta a compatibilidade com código legado
- Divisão da comunidade C++
- O desalinhamento de requisitos entre os grupos moderno e legado aprofunda os conflitos na comunidade
- A abordagem conservadora do comitê de padronização do C++ parece ser uma tentativa de aliviar esses conflitos
Perspectiva alternativa
- Ideias alternativas como Safe C++ não estão sendo bem recebidas dentro da comunidade
- Há críticas de que alguns membros do comitê de padronização resistem à mudança por insistirem em critérios estéticos pessoais
3 comentários
Rust ainda não tem um ecossistema de desenvolvimento de GUI, então acabam não adotando.
Seria bom surgir um framework de GUI decente que use Rust...
Não sei bem se Rust pode substituir C++, mas
é verdade que quase não se vê novos projetos em C++...
Parece que o comitê de C++ decidiu que o caminho certo é dar mais importância aos valores originais do que à metamorfose.
Comentários do Hacker News
O código C++ do Google muitas vezes não funciona nas versões mais recentes, e em muitos casos os desenvolvedores não demonstram vontade de corrigir isso. Isso acontece porque o código do Google permanece em um ponto intermediário entre o antigo e o moderno
Aconselha os responsáveis pelo padrão C++ a apoiarem a direção atual da linguagem e a ignorarem o ruído online sobre o futuro de C++
Afirma que o único grupo que continuará usando C++ será aquele com bases de código legadas grandes demais para serem refatoradas
Avalia que o sistema de edições do Rust funciona muito bem
Demonstra preocupação de que a saída de Herb Sutter da Microsoft tenha um impacto negativo para a empresa
std::span, proposta da Microsoft, foi adotado sem verificação de limites, e argumenta que os esforços de Herb eram necessáriosEnfatiza que os testes automatizados são o principal fator que separa os dois lados
Afirma que a principal razão para a perda de atratividade de C++ foi a ausência de módulos
Compara que Herb Sutter era habilidoso em conduzir compromissos, enquanto o Google empurrava sua própria agenda
Menciona que clientes com bases de código muito grandes não querem mudar nem 1% do código para atender regras rigorosas
Explica que Python e Javascript/Node/Typescript também têm várias facções