Roteiro do Bazel

Relatar um problema Conferir código-fonte Por noite · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Visão geral

À medida que o projeto Bazel continua evoluindo de acordo com suas necessidades, queremos compartilhar nossa atualização de 2024.

Esse roteiro descreve iniciativas atuais e previsões para o futuro da Desenvolvimento do Bazel, oferecendo visibilidade das prioridades atuais e em andamento projetos.

Versão do Bazel 8.0

Planejamos oferecer suporte de longo prazo ao Bazel 8.0 (LTS) para você no fim de 2024. Os seguintes recursos serão implementados.

Bzlmod: sistema de gerenciamento de dependências externas

Bzlmod resolve automaticamente processos transitivos dependências, permitindo que os projetos sejam escalonados de forma rápida e eficiente em termos de recursos.

Com o Bazel 8, o suporte ao espaço de trabalho será desativado por padrão. possível ativá-la usando --enable_workspace). com o WORKSPACE do Bazel 9 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 no Gerenciamento de dependências externas do Bazel incluindo:

  • A nova flag --enable_workspace pode ser definida como false para ser totalmente desativar a funcionalidade do ESPAÇO DE TRABALHO.
  • Nova API de observação de diretórios (consulte No 21435, enviado no Bazel 7.1).
  • Esquema aprimorado para gerar nomes de repositório canônicos para melhores 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 aprimorado (consulte 12227).
  • Suporte a fornecedores e ao modo off-line. Os usuários podem executar builds com dependências baixadas previamente (consulte 19563).
  • Redução dos 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).
  • Documentação aprimorada (por exemplo, 18030 (link em inglês), #15821) e migração e ferramentas de migração.

Melhorias na execução remota

  • Adicione suporte para execução assíncrona, acelerando a execução remota ao aumento do paralelismo com a flag --jobs.
  • Facilite a depuração de ausências no cache com um novo registro de execução compacto. reduzindo seu tamanho em 100x e sua sobrecarga de tempo de execução significativamente (consulte 18643).
  • Implemente a coleta de lixo para o cache de disco (consulte 5139).
  • Implementar o serviço de saída remota para permitir o download lento de builds arbitrários saídas (consulte 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 servidores dedicados repositórios e desassociando-os 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. rules_proto é será descontinuado.

O Bazel 8 vai fornecer uma flag de migração temporária que vai usar conjuntos de regras que faziam parte do binário nos repositórios correspondentes. Todos espera-se que os usuários desses conjuntos de regras eventualmente dependam de os repositórios e carregá-los de maneira semelhante a outros conjuntos de regras que nunca fizeram parte o Bazel

O Bazel 8 também vai aprimorar as APIs de extensão e sub-regra atuais e marcá-los como não experimentais.

Melhorias no Starlark

  • Macros simbólicas são uma nova maneira de escrever macros mais simples Usuários de BUILD, autores de macros e ferramentas. Em comparação com as macros legadas, O Bazel tem insights limitados sobre macros simbólicas, que ajudam os usuários a evitar e aplicar as práticas recomendadas.
  • Os finalizadores de pacotes são um recurso proposto para adicionar suporte de primeira classe a lógica personalizada de validação de pacotes. O objetivo deles é nos ajudar a descontinuar native.existing_rules():

Configurabilidade

  • O mapeamento do caminho de saída continua se estabilizando, prometendo melhor cache remoto desempenho 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 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 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, desenvolvedores costumam alterar um pequeno subconjunto dos arquivos de origem (por exemplo, quase nunca uma das dependências externas). Com o Skyfocus, o Bazel oferece uma uma maneira experimental de descartar um estado incremental desnecessário e reduzir a memória do Bazel além de oferecer a mesma experiência rápida de build incremental.

O escopo inicial visa melhorar apenas a métrica de heap retida. Pico de heap é uma possibilidade, mas não está incluída no escopo inicial.

Diversos

  • Instalação móvel v3, uma abordagem mais simples e mais mantida para a manutenção implantar aplicativos Android.
  • 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 ao plug-in mais recente do JetBrains lançamento.

Este roteiro mostra os objetivos e não deve ser considerado uma garantia. As prioridades estão sujeitas a alterações em resposta ao desenvolvedor e ao cliente feedback ou novas oportunidades de mercado.

Para receber notificações sobre novos recursos, incluindo atualizações do roteiro, participe do Grupo do Google.

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