Roteiro do Bazel

<ph-0-0>

Visão geral

À medida que o projeto Bazel continua evoluindo de acordo com 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. Assim, você tem visibilidade das prioridades atuais e dos projetos em andamento.

Versão do Bazel 8.0

Planejamos disponibilizar o suporte de longo prazo (LTS, na sigla em inglês) do Bazel 8.0 para você no final de 2024. Os seguintes recursos serão implementados.

Bzlmod: sistema de gerenciamento de dependências externas

O Bzlmod (link em inglês) resolve automaticamente dependências transitivas, permitindo que os projetos sejam escalonados de forma rápida e eficiente em termos de recursos.

Com o Bazel 8, o suporte ao WORKSPACE será desativado 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 terá 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 ESPAÇO DE TRABALHO.
  • Nova API de observação de diretório (consulte #21435, enviada no Bazel 7.1).
  • Esquema aprimorado para gerar nomes de repositório canônicos para melhorar o armazenamento em cache das ações nas atualizações da versão da dependência. (#21316, enviado no Bazel 7.1).
  • Um cache de repositório compartilhado foi melhorado (consulte a no 12227).
  • Suporte ao fornecedor e ao modo off-line: permite que os usuários executem builds com dependências pré-baixadas (consulte o #19563).
  • Redução dos conflitos de mesclagem em arquivos de bloqueio (20396, link em inglês).
  • Segmented MODULE.bazel (#17880)
  • Permissão para substituir o repositório gerado pela extensão do módulo (#19301).
  • Documentação aprimorada (por exemplo, #18030 e #15821) e o guia de migração e as ferramentas de migração.

Melhorias na execução remota

  • Foi adicionado suporte à execução assíncrona, acelerando a execução remota pelo maior paralelismo com a sinalização --jobs.
  • Facilite a depuração de ausências no cache com um novo registro de execução compacto, reduzindo significativamente o tamanho dele em 100 vezes e a sobrecarga de tempo de execução (consulte #18643).
  • Implemente a coleta de lixo para o cache de disco (consulte o #5139).
  • Implemente o serviço de saída remota para permitir o download lento de saídas de build arbitrárias (consulte o #20933).

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

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

  • Atualizar regras independentemente 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 fornece uma flag de migração temporária que usa automaticamente os conjuntos de regras que faziam parte do binário dos repositórios deles. Espera-se que todos os usuários desses conjuntos de regras dependam dos respectivos 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 APIs de extensão e sub-regra existentes e marcá-las como não experimentais.

Melhorias no Starlark

  • As macros simbólicas são uma nova maneira de escrever macros mais simples para usuários de BUILD, autores de macros e ferramentas. Em comparação com as macros legadas, sobre as quais 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. Eles servem para nos ajudar a descontinuar native.existing_rules().

Configurabilidade

  • O mapeamento do caminho de saída continua se estabilizando, prometendo melhor desempenho do cache remoto e velocidade de criação para designers de regras que usam transições.
  • Define automaticamente flags de build adequadas para um determinado --platforms.
  • Defina combinações de sinalizações compatíveis com o projeto e crie automaticamente destinos com sinalizações padrão sem precisar definir bazelrcs.
  • Não refaça a análise de build sempre que os sinalizadores de build mudarem.

Projeto Skyfocus - minimizar as estruturas de dados retidos

O Bazel tem muito estado na RAM para builds incrementais rápidos. No entanto, os desenvolvedores geralmente alteram 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 um estado incremental desnecessário e reduzir o consumo de memória do Bazel, sem deixar de oferecer a mesma experiência de build incremental rápida.

O escopo inicial visa melhorar apenas a métrica de heap retida. A redução de pico de heap é uma possibilidade, mas não incluída no escopo inicial.

Diversos

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

Compatibilidade com Bazel-JetBrains* IntelliJ IDEA

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

Este roteiro 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 de 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