Planejamento da Starlark

Última verificação: 21/04/2020 (histórico de atualizações)

Ponto de contato: laurentlb

Objetivo

Nossa meta é tornar o Bazel mais extensível. Os usuários precisam conseguir implementar as próprias regras e oferecer suporte a novas linguagens e ferramentas com facilidade. Queremos melhorar a experiência de escrever e manter essas regras.

Nosso foco está em duas áreas:

  • Tornar a linguagem e a API simples, mas eficientes.
  • Oferecer melhores ferramentas para ler, escrever, atualizar, depurar e testar o código.

2º trimestre de 2020

Integridade do build e práticas recomendadas:

  • P0. Desencorajar macros sem nome e garantir que o nome seja um literal de string exclusivo. Esse trabalho está focado na base de código do Google, mas pode afetar as ferramentas disponíveis publicamente.
  • P0. Tornar os comandos do Buildozer confiáveis em relação a seleções e variáveis.
  • P1. Fazer com que o Buildifier remova duplicados em listas que não classificamos devido a comentários.
  • P1. Atualizar o linter do Buildifier para recomendar expressões triviais embutidas.
  • P2. Estudar casos de uso para native.existing_rules e propor alternativas.
  • P2. Estudar casos de uso para o arquivo de prelúdio e propor alternativas.

Desempenho:

  • P1. Otimizar o interpretador do Starlark usando ambientes simples e compilação de bytecode.

Redução da dívida técnica:

  • P0. Adicionar a capacidade de transferir símbolos nativos para o Starlark em @bazel_tools.
  • P1. Excluir flags obsoletas (algumas delas ainda são usadas no Google. Portanto, precisamos limpar a base de código primeiro): incompatible_always_check_depset_elements, incompatible_disable_deprecated_attr_params, incompatible_no_support_tools_in_action_inputs, incompatible_new_actions_api.
  • P1. Garantir que as flags a seguir possam ser invertidas no Bazel 4.0: incompatible_disable_depset_items, incompatible_no_implicit_file_export, incompatible_run_shell_command_string, incompatible_restrict_string_escapes.
  • P1. Concluir o trabalho de lib.syntax (limpeza da API, separação do Bazel).
  • P2. Reduzir em 50% a latência de build e teste de uma edição trivial nos pacotes Java do Bazel.

Comunidade:

  • rules_python está ativo e bem mantido pela comunidade.
  • Suporte contínuo para rules_jvm_external (sem solicitações de envio pendentes, triagem de problemas, criação de versões).
  • Manter a infraestrutura de documentação do Bazel: centralizar e canonicalizar estilos CSS em bazel-website, bazel-blog e docs
  • Documentos do Bazel: adicionar testes de CI para o build do site de documentação de E2E para evitar regressões.

1º trimestre de 2020

Integridade do build e práticas recomendadas:

  • Permitir que os destinos rastreiem a pilha de chamadas de macro para exportação via bazel query
  • Implementar --incompatible_no_implicit_file_export
  • Remover as APIs de depset descontinuadas (#5817, #10313, #9017).
  • Adicionar um analisador de arquivos cruzados no Buildifier e implementar uma verificação de funções descontinuadas.

Desempenho:

  • Tornar os testes baseados em Java do Bazel duas vezes mais rápidos.
  • Implementar um profiler de CPU do Starlark.

Redução da dívida técnica:

  • Remover oito flags incompatíveis (depois de invertê-las).
  • Concluir o trabalho de limpeza de lib.syntax (interromper dependências).
  • Otimização do Starlark: ambiente simples, compilação de bytecode
  • Excluir toda a serialização da fase de análise, se possível
  • Fazer um plano para simplificar/otimizar lib.packages

Comunidade:

  • Publicar um glossário com definições para todos os termos específicos do Bazel