10 pontos por GN⁺ 2024-11-26 | 3 comentários | Compartilhar no WhatsApp
  • 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

 
aer0700 2024-11-27

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...

 
ndrgrd 2024-11-26

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.

 
GN⁺ 2024-11-26
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

    • O código C++ do Google pode sofrer corrupção de memória por causa de máquinas de estado e ponteiros fracos manuais
    • Considera positivo que o Google esteja deixando o ecossistema de C++
    • Acha que o interesse do Google no ecossistema Rust não será algo positivo
  • 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++

    • Recomenda que quem quiser verificação estática de tempo de vida use Rust
    • Sugere que contratados do governo usem Rust
    • Afirma que o processo de desenvolvimento tradicional de C++ está funcionando bem
  • Afirma que o único grupo que continuará usando C++ será aquele com bases de código legadas grandes demais para serem refatoradas

    • Outros grupos que perderam a confiança no WG21 estão migrando para novas linguagens
    • Menciona que Herb Sutter disse que adicionar anotações de tempo de vida ao C++ criaria uma "rampa de saída" para outras linguagens
  • Avalia que o sistema de edições do Rust funciona muito bem

    • Sugere que, se um sistema assim fosse introduzido em C++, embora pudesse haver limitações nas fronteiras dos módulos, isso poderia ser uma forma de satisfazer os dois lados
  • Demonstra preocupação de que a saída de Herb Sutter da Microsoft tenha um impacto negativo para a empresa

    • Avalia que Herb liderou a adoção do padrão C++ e trabalhou por uma visão de futuro melhor
    • Menciona que std::span, proposta da Microsoft, foi adotado sem verificação de limites, e argumenta que os esforços de Herb eram necessários
  • Enfatiza que os testes automatizados são o principal fator que separa os dois lados

    • Explica que, em apps legados em C++ sem testes automatizados, mudanças no código correm o risco de quebrar a aplicação
    • Alerta que, pelas características do C++, até mudanças no código que parecem inofensivas podem causar problemas
  • Afirma que a principal razão para a perda de atratividade de C++ foi a ausência de módulos

    • Avalia que, se houvesse módulos, uma comunidade de C++ poderia ter se formado
  • 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

    • Afirma que muitas empresas estão investindo tempo para atualizar para novos padrões
  • Explica que Python e Javascript/Node/Typescript também têm várias facções

    • Avalia que Rust tentou evitar essas facções, mas acabou com uma curva de aprendizado mais alta
    • Menciona que Go tentou evitar facções e alcançar ampla adoção, mas precisou introduzir genéricos