Visão geral
À medida que o projeto Bazel continua evoluindo em resposta às suas necessidades, queremos compartilhar nossa atualização de 2024.
Este roteiro descreve as iniciativas atuais e as previsões para o futuro do desenvolvimento do Bazel, oferecendo visibilidade das prioridades atuais e dos projetos em andamento.
Lançamento do Bazel 8.0
Planejamos oferecer o suporte a longo prazo (LTS) do Bazel 8.0 no final de 2024. Os seguintes recursos estão planejados para serem implementados.
Bzlmod: sistema de gerenciamento de dependências externas
O Bzlmod resolve automaticamente as dependências transitivas, permitindo que os projetos sejam escalonados sem perder 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 incluir várias melhorias na funcionalidade de gerenciamento de dependências externas do Bazel, incluindo:
- A nova flag
--enable_workspace
pode ser definida comofalse
para desativar completamente a funcionalidade do WORKSPACE. - Nova API de observação de diretório (consulte #21435, enviada no Bazel 7.1).
- Melhoramos o esquema para gerar nomes canônicos de repositórios e aumentar a capacidade de armazenamento em cache das 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 a fornecedores e modo off-line: permite que os usuários executem builds com dependências pré-baixadas (consulte #19563).
- Redução de conflitos de mesclagem em arquivos de bloqueio (#20396).
- MODULE.bazel segmentado (#17880)
- Permitir substituição do repositório gerado pela extensão do módulo (#19301)
- Melhoria na documentação (por exemplo, #18030, #15821) e no guia e nas ferramentas de migração.
Melhorias na execução remota
- Adição de suporte à execução assíncrona, acelerando a execução remota com
aumento do paralelismo com a flag
--jobs
. - Facilite a depuração de falhas de cache com um novo registro de execução compacto, reduzindo o tamanho em 100 vezes e a sobrecarga de tempo de execução significativamente (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
Migração completa dos conjuntos de regras do Android, C++, Java e Python para repositórios dedicados e separação deles das versões do Bazel. Isso permite que usuários do Bazel e autores de regras
- Atualize as regras de forma independente do Bazel.
- Atualize e personalize 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
. O uso de 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 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
usuários do
BUILD
, autores de macros e ferramentas. Em comparação com as macros legadas, que o Bazel tem apenas um insight limitado, as macros simbólicas ajudam os usuários a evitar erros comuns e 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 personalizada. Elas foram criadas para ajudar a descontinuar
native.existing_rules()
.
Capacidade de configuração
- O mapeamento de caminhos de saída continua se estabilizando, o que promete melhorar o desempenho do cache remoto e a velocidade de build para designers de regras que usam transições.
- Definir automaticamente flags de build adequadas para um determinado
--platforms
. - Defina combinações de flags compatíveis com o projeto e crie destinos automaticamente 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: minimizar estruturas de dados retidos
O Bazel mantém muito estado na RAM para builds incrementais rápidos. No entanto, os desenvolvedores geralmente mudam um pequeno subconjunto dos arquivos de origem (por exemplo, quase nunca uma das dependências externas). Com o Skyfocus, o Bazel oferece 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ápido.
O escopo inicial visa melhorar apenas a métrica de heap retido. A redução do pico de heap é uma possibilidade, mas não está incluída no escopo inicial.
Diversos
- Mobile install 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 do Bazel-JetBrains* ao IntelliJ IDEA
Atualizações incrementais do plug-in do IntelliJ para oferecer suporte à versão mais recente do plug-in do JetBrains.
Este mapa de planejamento mostra metas 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 roteiro, participe da comunidade do Grupo do Google.
*Copyright © 2022 JetBrains s.r.o. JetBrains e IntelliJ são marcas registradas da JetBrains s.r.o.