Roteiro do Bazel

Report an issue View source Nightly · 8.2 · 8.1 · 8.0 · 7.6 · 7.5

Como o Bazel continua evoluindo para atender às suas necessidades, queremos compartilhar nossa atualização do planejamento de 2025.

Planejamos oferecer o suporte a longo prazo (LTS) do Bazel 9.0 no final de 2025.

Transição completa para o Bzlmod

O Bzlmod é o sistema de dependência externa padrão do Bazel desde o Bazel 7, substituindo o sistema de ESPAÇO DE TRABALHO legado. Em março de 2025, o registro central do Bazel hospedava mais de 650 módulos.

Com o Bazel 9, vamos remover completamente a funcionalidade WORKSPACE, e o Bzlmod será a única maneira de introduzir dependências externas no Bazel. Para minimizar o custo da migração para a comunidade, vamos nos concentrar em melhorar ainda mais nosso guia e ferramenta de migração.

Além disso, nosso objetivo é implementar um cache de repositório compartilhado aprimorado (consulte #12227) com a coleta de lixo e, talvez, fazer o backport para o Bazel 8. O Registro Central do Bazel também vai oferecer suporte à verificação de atestados da SLSA.

Migração de regras do Android, C++, Java, Python e Proto

Com o Bazel 8, migramos o suporte a regras do Android, Java, Python e Proto da base de código do Bazel para regras do Starlark nos repositórios correspondentes. Para facilitar a migração, implementamos os recursos de carregamento automático no Bazel, que podem ser controlados com as flags --incompatible_autoload_externally e --incompatible_disable_autoloads_in_main_repo.

Com o Bazel 9, nosso objetivo é desativar o carregamento automático por padrão e exigir que todos os projetos carreguem explicitamente as regras necessárias nos arquivos BUILD.

Vamos reescrever a maior parte do suporte à linguagem C++ para Starlark, desvinculá-lo do binário do Bazel e movê-lo para o repositório /rules_cc. Esse é o último suporte a idioma principal que ainda faz parte do Bazel.

Também estamos transferindo testes de unidade para regras C++, Java e Proto para o Starlark, movendo-os para repositórios próximos à implementação para aumentar a velocidade dos autores de regras.

Melhorias no Starlark

O Bazel vai poder avaliar macros simbólicas de forma lenta. Isso significa que uma macro simbólica não será executada se os destinos declarados não forem solicitados, melhorando a performance de pacotes muito grandes.

O Starlark terá um sistema de tipos experimental, semelhante às anotações de tipo do Python. Esperamos que o sistema de tipos se estabilize após o lançamento do Bazel 9.

Capacidade de configuração

Nosso foco principal é reduzir o custo e a confusão dos flags de build.

Estamos testando um novo modelo de configuração de projeto que não exige que os usuários saibam quais flags de build e teste definir em cada lugar. Assim, $ bazel test //foo define automaticamente as flags corretas com base na política do projeto de foo. Esse recurso provavelmente vai continuar experimental na versão 9.0, mas feedbacks de orientação são bem-vindos.

O escopo de flag permite remover flags do Starlark quando elas saem dos limites do projeto para que não quebrem o armazenamento em cache em dependências transitivas que não precisam delas. Isso torna os builds que usam transições mais baratos e rápidos. Confira um exemplo. Estamos ampliando a ideia para controlar quais flags são propagadas para configurações de execução e considerando um suporte ainda mais flexível, como o Starlark personalizado, para determinar quais bordas de dependência precisam propagar flags.

Estamos priorizando o esforço para mover as flags de idioma integradas do Bazel para o Starlark, onde elas podem ser usadas com definições de regras relacionadas.

Melhorias na execução remota

Planejamos adicionar suporte à execução assíncrona, acelerando a execução remota aumentando o paralelismo.


Para acompanhar as atualizações do roteiro e discutir os recursos planejados, participe do servidor Slack da comunidade em slack.bazel.build.

O objetivo deste cronograma é informar a comunidade sobre as intenções da equipe para o Bazel 9.0. As prioridades estão sujeitas a mudanças em resposta ao feedback de desenvolvedores e clientes ou a novas oportunidades de mercado.