Hoja de ruta de Bazel

Informar un problema Ver fuente

Descripción general

A medida que el proyecto de Bazel continúa evolucionando en respuesta a tus necesidades, queremos compartir nuestra actualización de 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 brindarte asistencia a largo plazo (LTS) de Bazel 8.0 a finales de 2024. Se planea implementar las siguientes funciones.

Bzlmod: Sistema de administración de dependencias externo

Bzlmod resuelve automáticamente las dependencias transitivas, lo que permite que los proyectos escalen mientras se mantiene la velocidad y la eficiencia en el uso de recursos.

Con Bazel 8, inhabilitaremos la compatibilidad con WORKSPACE de forma predeterminada (aún 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 contendrá una serie de mejoras para la función de administración de dependencias externas de Bazel, incluidas las siguientes:

  • La marca nueva --enable_workspace se puede establecer en false para inhabilitar completamente la funcionalidad de WORKSPACE.
  • Se agregó una nueva API de visualización de directorios (consulta #21435, incluida en Bazel 7.1).
  • Se mejoró el esquema para generar nombres de repositorio canónicos a fin de mejorar la capacidad de almacenamiento en caché de las acciones en las actualizaciones de versiones de dependencias. (#21316, enviado en Bazel 7.1).
  • Una caché de repositorio compartido mejorada (consulta #12227).
  • Compatibilidad con proveedores y modo sin conexión: permite a los usuarios ejecutar compilaciones con dependencias descargadas previamente (consulta #19563).
  • Se redujeron los conflictos de combinación en los archivos de bloqueo (#20396).
  • MODULE.bazel segmentado (#17880)
  • Se permite la anulación del repositorio generado por la extensión del módulo (#19301).
  • Se mejoraron la documentación (p.ej., #18030 o #15821), la guía y las herramientas de migración.

Mejoras en la ejecución remota

  • Agrega compatibilidad con la ejecución asíncrona, lo que acelera la ejecución remota mediante un mayor paralelismo con la marca --jobs.
  • Facilita la depuración de errores de caché mediante un nuevo registro de ejecución compacta, lo que reduce su tamaño 100 veces y su sobrecarga del entorno de ejecución de forma significativa (consulta #18643).
  • Implementa la recolección de elementos no utilizados para la caché de disco (consulta #5139).
  • Implementa el servicio de salida remota para permitir la descarga diferida de salidas de compilación arbitrarias (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 sepáralos de las versiones de Bazel. Este esfuerzo permite que los usuarios de Bazel y los autores de reglas

  • Actualiza las reglas de forma independiente 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á de forma automática 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 eventualmente dependan 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 subregla 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 dificultades 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, lo que promete un mejor rendimiento de la caché remota y la 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 objetivos de compilación automática con marcas predeterminadas sin tener que configurar bazelrc.
  • No rehacer el análisis de compilación cada vez que cambian las marcas de compilación.

Project Skyfocus: Minimiza las estructuras de datos retenidas

Bazel contiene una gran cantidad de 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, mientras proporcionaba la misma experiencia de compilación incremental rápida.

El alcance inicial tiene como objetivo mejorar solo la métrica del montón retenida. Es posible reducir el montón máximo, pero no se incluye en el alcance inicial.

Varios

  • Instalación móvil v3, un enfoque más simple y mejor mantenido para implementar aplicaciones para Android de forma incremental.
  • Recolección de elementos no utilizados para cachés de repositorios y install_base de Bazel
  • Reducción de la sobrecarga de la zona de pruebas

Compatibilidad con Bazel-JetBrains* IntelliJ IDEA

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

En esta hoja de ruta, se resumen los objetivos y no se debe tomar como garantía. Las prioridades están sujetas a cambios en función de los comentarios de los desarrolladores y de los clientes o de las nuevas oportunidades de mercado.

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

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