Fatos Principais
- O projeto Chromium proibiu oficialmente recursos específicos do C++ para manter a estabilidade e segurança do código em seu vasto ecossistema de navegador.
- Essas restrições estão detalhadas no guia de estilo oficial do projeto, que serve como referência definitiva para todos os contribuidores.
- Entre os recursos proibidos estão std::make_unique, std::make_shared e std::regex devido a preocupações de compatibilidade e desempenho.
- O projeto fornece alternativas específicas do Chromium, como base::MakeUnique, para garantir comportamento consistente em todas as plataformas suportadas.
- Os processos de revisão de código agora incluem verificações automatizadas que sinalizam recursos proibidos antes que o código seja mesclado na branch principal.
- O guia de estilo é um documento vivo que recebe atualizações regulares à medida que os padrões C++ evoluem e o suporte do compilador melhora.
Evolução do Código
O projeto Chromium estabeleceu diretrizes abrangentes que proíbem recursos específicos do C++ para manter a estabilidade em seu vasto código. Essas restrições refletem o compromisso do projeto com a manutenibilidade a longo prazo e a segurança.
Como um dos maiores projetos de software de código aberto do mundo, as decisões do Chromium impactam milhões de desenvolvedores e usuários globalmente. O guia de estilo do projeto agora proíbe explicitamente certas adições modernas do C++ que poderiam introduzir instabilidade ou vulnerabilidades de segurança.
Os recursos proibidos incluem várias adições modernas do C++ que poderiam comprometer os padrões de estabilidade e segurança do projeto. Essa decisão sublinha o foco do projeto em qualidade de código e compatibilidade entre plataformas.
Lista de Recursos Proibidos
O projeto Chromium identificou vários recursos do C++ que agora são proibidos dentro do código. Essas restrições estão detalhadas no guia de estilo oficial do projeto, que serve como referência definitiva para os contribuidores.
Entre os recursos proibidos estão:
- std::make_unique - Proibido devido a preocupações de compatibilidade
- std::make_shared - Restrito por motivos semelhantes de compatibilidade
- std::shared_ptr com arrays - Não permitido devido a inconsistências de implementação
- std::atomic com certos tipos - Limitado para prevenir comportamento indefinido
- std::regex - Banido devido a problemas de desempenho e compatibilidade
O projeto também restringe o uso de std::filesystem e std::optional em certos contextos. Esses recursos, embora parte dos padrões modernos do C++, são considerados inadequados para os requisitos específicos do Chromium.
O guia de estilo enfatiza que essas restrições se aplicam a todo o código, incluindo todos os subprojetos e dependências. Os contribuidores devem aderir a essas diretrizes ao enviar código para revisão.
Razão por Trás das Restrições
A decisão de proibir esses recursos decorre da posição única do Chromium como um projeto multiplataforma que suporta múltiplos sistemas operacionais e arquiteturas. O projeto deve manter compatibilidade com compiladores e bibliotecas mais antigos, garantindo ao mesmo tempo comportamento consistente entre plataformas.
Considerações de segurança também desempenham um papel crucial nessas restrições. Alguns recursos modernos do C++ podem introduzir bugs sutis ou comportamento indefinido que poderiam ser explorados. Os mantenedores do projeto priorizam segurança e confiabilidade sobre conveniência.
O desempenho é outro fator crítico. Embora alguns recursos modernos do C++ ofereçam conveniência, eles podem não atender aos requisitos de desempenho do Chromium. A escala massiva do projeto significa que até mesmo pequenas regressões de desempenho podem ter impacto significativo.
A equipe do Chromium descobriu que certos recursos, apesar de fazerem parte do padrão C++, têm implementações inconsistentes entre diferentes plataformas. Essa inconsistência pode levar a comportamentos inesperados e tornar a depuração mais difícil.
Impacto no Desenvolvimento
Essas restrições influenciam significativamente como os desenvolvedores escrevem código para o Chromium. Os contribuidores devem usar abordagens alternativas que estejam de acordo com as diretrizes do projeto, alcançando ao mesmo tempo a mesma funcionalidade.
Por exemplo, em vez de usar std::make_unique, os desenvolvedores devem usar base::MakeUnique ou alternativas semelhantes específicas do Chromium. Essas alternativas são cuidadosamente projetadas para funcionar de forma consistente em todas as plataformas suportadas.
O projeto fornece documentação detalhada e exemplos para cada recurso restrito, ajudando os desenvolvedores a entender as alternativas aprovadas. Essa documentação é atualizada regularmente à medida que o projeto evolui.
Os processos de revisão de código foram aprimorados para detectar violações dessas restrições automaticamente. O sistema de compilação do Chromium inclui verificações que sinalizam recursos proibidos antes que o código seja mesclado na branch principal.
Considerações Futuras
O projeto Chromium continua a avaliar seus padrões de codificação à medida que o C++ evolui. Embora certos recursos estejam atualmente banidos, o projeto permanece aberto a reconsiderar essas decisões à medida que o suporte do compilador melhora e os padrões amadurecem.
O guia de estilo é um documento vivo que recebe atualizações regulares. Os contribuidores são encorajados a fornecer feedback e sugerir modificações com base em experiência prática e requisitos em mudança.
À medida que o projeto cresce e novos padrões C++ surgem, recursos adicionais podem ser adicionados à lista de proibidos, enquanto outros podem se tornar permitidos sob condições específicas. Essa abordagem dinâmica garante que o Chromium permaneça na vanguarda das melhores práticas de engenharia de software.
O compromisso do projeto com esses padrões demonstra sua dedicação em produzir software de alta qualidade, seguro e mantível que atende a milhões de usuários em todo o mundo.
Principais Conclusões
A decisão do projeto Chromium de proibir recursos específicos do C++ representa uma abordagem ponderada para gerenciar um código massivo e complexo. Essas restrições priorizam estabilidade, segurança e manutenibilidade sobre conveniência.
Os desenvolvedores que trabalham com o Chromium devem se adaptar a essas diretrizes, usando alternativas aprovadas que garantam comportamento consistente entre plataformas. Embora isso possa exigir esforço adicional, os benefícios em qualidade de código e confiabilidade são substanciais.
Os padrões em evolução do projeto refletem a natureza dinâmica do desenvolvimento de software, onde as melhores práticas continuam a melhorar para atender a novos desafios e oportunidades.
Perguntas Frequentes
Quais recursos do C++ o Chromium proibiu?
O Chromium proibiu vários recursos modernos do C++ incluindo std::make_unique, std::make_shared, std::shared_ptr com arrays, std::atomic com certos tipos, std::regex, std::filesystem e std::optional em certos contextos. Essas restrições estão detalhadas no guia de estilo oficial do projeto.
Por que o Chromium proibiu esses recursos?
As restrições decorrem de preocupações de compatibilidade, considerações de segurança e requisitos de desempenho. Alguns recursos têm implementações inconsistentes entre plataformas, enquanto outros poderiam introduzir bugs sutis ou comportamento indefinido que poderiam ser explorados.
Quais alternativas os desenvolvedores usam?
O Chromium fornece alternativas específicas como base::MakeUnique em vez de std::make_unique. Essas alternativas são cuidadosamente projetadas para funcionar de forma consistente em todas as plataformas suportadas e atender aos requisitos de desempenho do projeto.
Como essas restrições são aplicadas?
O sistema de compilação do Chromium inclui verificações automatizadas que sinalizam recursos proibidos durante a revisão de código. Isso garante que as violações sejam detectadas antes que o código seja mesclado na branch principal, mantendo a integridade do código.









