Roteiro do Bazel

Visão geral

À medida que o projeto do Bazel continua evoluindo em resposta às suas necessidades, queremos compartilhar nossa atualização de 2024.

Este roadmap descreve as iniciativas atuais e as previsões para o futuro do desenvolvimento do Bazel, oferecendo visibilidade sobre as prioridades atuais e os projetos em andamento.

Versão 8.0 do Bazel

Planejamos lançar o suporte a longo prazo long term support (LTS) do Bazel 8.0 no final de 2024. Os seguintes recursos serão implementados.

Bzlmod: sistema externo de gerenciamento de dependências

Bzlmod resolve automaticamente as dependências transitivas , permitindo que os projetos sejam escalonados, mantendo a velocidade e a eficiência de recursos.

Com o Bazel 8, vamos desativar o suporte ao WORKSPACE por padrão (ainda será possível ativá-lo usando --enable_workspace); com o Bazel 9, o suporte ao WORKSPACE será removido. A partir do Bazel 7.1, é possível definir --noenable_workspace para ativar o novo comportamento.

O Bazel 8.0 vai conter várias melhorias na funcionalidade de gerenciamento de dependências externas do Bazel, incluindo:

  • A nova flag --enable_workspace pode ser definida como false para desativar completamente a funcionalidade do WORKSPACE.
  • Nova API de observação de diretórios (consulte #21435, enviada no Bazel 7.1).
  • Esquema aprimorado para gerar nomes de repositórios canônicos para melhor capacidade de armazenamento em cache de ações em atualizações de versão de dependência. (#21316, enviado no Bazel 7.1)
  • Um cache de repositório compartilhado aprimorado (consulte #12227).
  • Suporte ao modo de fornecedor e off-line: permite que os usuários executem builds com dependências pré-baixadas (consulte #19563).
  • Conflitos de mesclagem reduzidos em arquivos de bloqueio (#20396).
  • MODULE.bazel segmentado (#17880)
  • Permitir a substituição do repositório gerado pela extensão do módulo (#19301)
  • Documentação aprimorada (por exemplo, #18030, #15821) e guia de migração e ferramentas de migração.

Melhorias na execução remota

  • Adicione suporte à execução assíncrona, acelerando a execução remota com maior paralelismo com a flag --jobs.
  • Facilite a depuração de erros de cache com um novo registro de execução compacto, reduzindo o tamanho em 100 vezes e a sobrecarga de tempo de execução de maneira significativa (consulte #18643).
  • Implemente a coleta de lixo para o cache de disco (consulte #5139).
  • Implemente o serviço de saída remota para permitir o download lento de saídas de build arbitrárias (consulte #20933).

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

Conclua a migração dos conjuntos de regras do Android, C++, Java e Python para repositórios dedicados e desvincule-os das versões do Bazel. Esse esforço permite que os usuários do Bazel e os autores de regras

  • Atualizem as regras de forma independente do Bazel.
  • Atualizem e personalizem as regras conforme necessário.

O novo local dos conjuntos de regras será bazelbuild/rules_android, rules_cc, rules_java, rules_python e google/protobuf. rules_proto será descontinuado.

O Bazel 8 vai fornecer uma flag de migração temporária que usará automaticamente os conjuntos de regras que faziam parte do binário dos repositórios. Espera-se que todos os usuários desses conjuntos de regras dependam dos repositórios e os carreguem de maneira semelhante a outros conjuntos de regras que nunca fizeram parte do Bazel.

O Bazel 8 também vai melhorar as regras de extensão e as APIs de subregras atuais e marcá-las como não experimentais.

Melhorias no Starlark

  • As macros simbólicas são uma nova maneira de escrever macros mais amigáveis para BUILD usuários, autores de macros e ferramentas. Em comparação com as macros legadas, que o Bazel tem apenas insights limitados, as macros simbólicas ajudam os usuários a evitar armadilhas comuns e a aplicar as práticas recomendadas.
  • Os finalizadores de pacotes são um recurso proposto para adicionar suporte de primeira classe à lógica de validação de pacotes personalizados. Eles têm como objetivo nos ajudar a descontinuar native.existing_rules().

Capacidade de configuração

  • O mapeamento do caminho de saída continua a se estabilizar, oferecendo melhor desempenho de cache remoto e velocidade de build para designers de regras que usam transições.
  • Defina automaticamente as flags de build adequadas para um determinado --platforms.
  • Defina combinações de flags com suporte a projetos e crie automaticamente destinos com flags padrão sem precisar definir bazelrcs.
  • Não refaça a análise de build sempre que as flags de build mudarem.

Projeto Skyfocus: minimize as estruturas de dados retidas

O Bazel mantém muito estado na RAM para builds incrementais rápidos. No entanto, os desenvolvedores costumam mudar um pequeno subconjunto dos arquivos de origem (por exemplo, quase nunca uma das dependências externas). Com o Skyfocus, o Bazel vai fornecer uma maneira experimental de descartar o estado incremental desnecessário e reduzir a ocupação de memória do Bazel, mantendo a mesma experiência de build incremental rápida.

O escopo inicial tem como objetivo melhorar apenas a métrica de heap retido. A redução do heap de pico é uma possibilidade, mas não está incluída no escopo inicial.

Diversos

  • Instalação para dispositivos móveis v3, uma abordagem mais simples e bem mantida para implantar aplicativos Android de forma incremental.
  • Coleta de lixo para caches de repositório e install_base do Bazel.
  • Redução da sobrecarga de sandbox.

Suporte ao IntelliJ IDEA do Bazel-JetBrains*

Atualizações incrementais do plug-in do IntelliJ para oferecer suporte à versão mais recente do plug-in do JetBrains release.

Este roadmap mostra os destinos e não deve ser considerado como garantia. As prioridades estão sujeitas a mudanças em resposta ao feedback de desenvolvedores e clientes ou a novas oportunidades de mercado.

Para receber notificações sobre novos recursos, incluindo atualizações deste roadmap, participe da comunidade do Google Groups.

*Copyright © 2022 JetBrains s.r.o. JetBrains e IntelliJ são marcas registradas da JetBrains s.r.o.