Visão geral
Como o projeto Bazel continua a evoluir de acordo com suas necessidades, queremos compartilhar nossa atualização de 2024.
Este roteiro descreve as iniciativas e previsões atuais para o futuro do desenvolvimento do Bazel, visibilidade às prioridades atuais e aos projetos em andamento.
Versão 8.0 do Bazel
Planejamos oferecer o suporte a longo prazo (LTS) do Bazel 8.0 no final de 2024. Os recursos a seguir estão planejados para serem implementados.
Bzlmod: sistema de gerenciamento de dependências externas
O Bzlmod resolve automaticamente dependências transitivas, permitindo que os projetos sejam dimensionados, 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 comofalse
para desativar completamente a funcionalidade WORKSPACE. - Nova API de monitoramento de diretório (consulte #21435, enviada no Bazel 7.1).
- Esquema aprimorado para gerar nomes de repositório canônicos para melhor cacheabilidade 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 do fornecedor e 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 a substituição do repositório gerado pela extensão do módulo (#19301).
- Melhoria na documentação (por exemplo, #18030, #15821) e no guia de migração 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
. - Facilitamos 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 execução significativamente (consulte #18643).
- Implementação da coleta de lixo para o cache de disco (consulte #5139).
- Implementação do serviço de saída remoto 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 de conjuntos de regras do Android, C++, Java e Python para repositórios dedicados e desacoplagem deles das versões do Bazel. Esse esforço permite que os usuários e autores de regras do Bazel
- Atualize as regras de forma independente do Bazel.
- Atualize e personalize as regras conforme necessário.
O novo local das regras de políticas 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 as rulesets que antes faziam parte do binário dos repositórios. Todos os usuários dessas regras vão depender dos repositórios e carregá-los de forma semelhante a outras regras que nunca fizeram parte do Bazel.
O Bazel 8 também vai melhorar as APIs de regras e subregras de extensão atuais e marcá-las como não experimentais.
Melhorias no Starlark
- As macros simbólicas são uma nova maneira de escrever macros que é mais amigável para
usuários, autores de macros e ferramentas do
BUILD
. Em comparação com as macros legados, que o Bazel tem apenas insights limitados, as macros simbólicas ajudam os usuários a evitar armadilhas 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 personalizados. O objetivo deles é ajudar a descontinuar
native.existing_rules()
.
Capacidade de configuração
- O mapeamento de caminho de saída continua se estabilizando: prometendo melhor desempenho do cache remoto e velocidade de build para designers de regras que usam transições.
- Define automaticamente flags de build adequadas para um determinado
--platforms
. - Definir combinações de flags com suporte do projeto e criar 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: minimizar estruturas de dados retidas
O Bazel armazena muitos estados 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 vai oferecer uma maneira experimental de descartar estados incrementais desnecessários e reduzir o uso de memória do Bazel, além de oferecer a mesma experiência de build incremental rápida.
O escopo inicial tem como objetivo melhorar apenas a métrica de heap retida. A redução de heap máxima é uma possibilidade, mas não está incluída no escopo inicial.
Diversos
- Instalação para dispositivos móveis v3, uma abordagem mais simples e com melhor manutenção para implantar aplicativos Android de forma incremental.
- Coleta de lixo para caches de repositório e
install_base
do Bazel. - Redução da sobrecarga do sandbox.
Suporte do Bazel-JetBrains* para o IntelliJ IDEA
Atualizações incrementais do plug-in do IntelliJ para oferecer suporte à versão mais recente do plug-in do JetBrains.
Este cronograma mostra os objetivos e não deve ser considerado uma 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 cronograma, participe da comunidade Grupo do Google.
*Copyright © 2022 JetBrains s.r.o. JetBrains e IntelliJ são marcas registradas da JetBrains s.r.o.