Hoja de ruta de Bazel

Informar un problema Ver fuente Noche /}1}

Descripción general

A medida que el proyecto de Bazel sigue evolucionando para responder a tus necesidades, queremos compartir nuestra actualización del 2024.

En esta hoja de ruta, se describen las iniciativas y predicciones actuales para el futuro del desarrollo de Bazel, lo que te brinda visibilidad de las prioridades actuales y los proyectos en curso.

Versión de Bazel 8.0

Planeamos ofrecerte la asistencia a largo plazo (LTS) de Bazel 8.0 a fines del 2024. Se planea implementar las siguientes funciones.

Bzlmod: sistema de gestión de dependencias externo

Bzlmod resuelve automáticamente las dependencias transitivas, lo que permite que los proyectos escalen sin ser rápidos y con un uso eficiente de los recursos.

Con Bazel 8, inhabilitaremos la compatibilidad con WORKSPACE de forma predeterminada (igualmente podrás habilitarla con --enable_workspace). Con Bazel 9, se quitará la compatibilidad con WORKSPACE. A partir de Bazel 7.1, puedes configurar --noenable_workspace para habilitar el nuevo comportamiento.

Bazel 8.0 incluirá una serie de mejoras para la funcionalidad de administración de dependencias externas de Bazel, incluidas las siguientes:

  • La nueva marca --enable_workspace se puede establecer en false para inhabilitar por completo la funcionalidad de WORKSPACE.
  • Nueva API de visualización de directorios (consulta #21435, incluida en Bazel 7.1).
  • Esquema mejorado para generar nombres de repositorios canónicos para mejorar la capacidad de almacenamiento en caché de las acciones en las actualizaciones de versión de dependencia. (#21316, enviado en Bazel 7.1)
  • Una caché de repositorio compartido mejorada (consulta #12227).
  • Compatibilidad con proveedores y modos sin conexión: Permite que los usuarios ejecuten compilaciones con dependencias descargadas previamente (consulta #19563).
  • Se redujeron los conflictos de combinación en los archivos de bloqueo (#20396).
  • Segmented MODULE.bazel (#17880)
  • Se permite la anulación del repositorio generado de la extensión del módulo (#19301).
  • Documentación mejorada (p.ej., #18030, #15821) y herramientas de migración y la guía de migración.

Mejoras para la ejecución remota

  • Se agregó compatibilidad con la ejecución asíncrona y acelera la ejecución remota mediante un aumento del paralelismo con la marca --jobs.
  • Facilita la depuración de errores de caché con un nuevo registro de ejecución compacto, lo que reduce su tamaño en 100 veces y su sobrecarga de tiempo de ejecución de forma significativa (consulta #18643).
  • Implementa la recolección de elementos no utilizados para la caché del disco (consulta #5139).
  • Implementa el servicio de salida remota para permitir la descarga diferida de resultados de compilación arbitrarios (consulta #20933).

Migración de reglas de Android, C++, Java, Python y Proto

Completa la migración de los conjuntos de reglas de Android, C++, Java y Python a repositorios dedicados y los separa de las versiones de Bazel. Este esfuerzo permite que los usuarios y autores de reglas de Bazel

  • Actualiza las reglas independientemente de Bazel.
  • Actualiza y personaliza las reglas según sea necesario.

La nueva ubicación de los conjuntos de reglas será bazelbuild/rules_android, rules_cc, rules_java, rules_python y google/protobuf. rules_proto dejará de estar disponible.

Bazel 8 proporcionará una marca de migración temporal que usará automáticamente los conjuntos de reglas que antes formaban parte del objeto binario de sus repositorios. Se espera que todos los usuarios de esos conjuntos de reglas dependan en algún momento de sus repositorios y los carguen de manera similar a otros conjuntos de reglas que nunca formaron parte de Bazel.

Bazel 8 también mejorará las reglas de extensión y las APIs de subreglas existentes, y las marcará como no experimentales.

Mejoras de Starlark

  • Las macros simbólicas son una nueva forma de escribir macros que es más fácil de usar para los usuarios de BUILD, los autores de macros y las herramientas. En comparación con las macros heredadas, de las que Bazel solo tiene estadísticas limitadas, las macros simbólicas ayudan a los usuarios a evitar errores comunes y aplicar prácticas recomendadas.
  • Los finalizadores de paquetes son una función propuesta para agregar compatibilidad de primera clase con la lógica de validación de paquetes personalizada. Su objetivo es ayudarnos a dar de baja native.existing_rules().

Configuración

  • La asignación de la ruta de salida se sigue estabilizando: prometiendo un mejor rendimiento de la caché remota y una velocidad de compilación para los diseñadores de reglas que usan transiciones.
  • Establece automáticamente marcas de compilación adecuadas para un --platforms determinado.
  • Define combinaciones de marcas compatibles con el proyecto y destinos de compilación automáticos con marcas predeterminadas sin tener que configurar bazelrcs.
  • No rehacer el análisis de compilación cada vez que cambien las marcas de compilación.

Proyecto Skyfocus: Minimiza las estructuras de datos retenidos

Bazel conserva mucho estado en la RAM para compilaciones incrementales rápidas. Sin embargo, los desarrolladores a menudo cambian un pequeño subconjunto de los archivos de origen (p.ej., casi nunca una de las dependencias externas). Con Skyfocus, Bazel proporcionará una forma experimental de descartar el estado incremental innecesario y reducir el espacio en memoria de Bazel, a la vez que proporciona la misma experiencia de compilación incremental rápida.

El alcance inicial tiene como objetivo mejorar únicamente la métrica del montón retenido. La reducción de montón máximo es una posibilidad, pero no se incluye en el alcance inicial.

Varios

  • Instalación para dispositivos móviles v3, un enfoque más simple y mantenido para implementar de manera incremental aplicaciones para Android.
  • Recolección de elementos no utilizados para cachés de repositorio y install_base de Bazel.
  • Se redujo la sobrecarga de la zona de pruebas.

Compatibilidad con IntelliJ IDEA con Bazel-JetBrains*

Actualizaciones incrementales del complemento de IntelliJ para admitir la versión más reciente del complemento de JetBrains.

El resumen de esta hoja de ruta se orienta a los objetivos y no debe tomarse como garantía. Las prioridades están sujetas a cambios en respuesta a los comentarios de los desarrolladores y los clientes, o bien a nuevas oportunidades de mercado.

Para recibir notificaciones sobre funciones nuevas, incluidas las actualizaciones de esta hoja de ruta, únete a la comunidad del Grupo de Google.

*Copyright © 2022 JetBrains s.r.o. JetBrains e IntelliJ son marcas registradas de JetBrains s.r.o.