Descripción general
A medida que el proyecto de Bazel sigue evolucionando en respuesta a tus necesidades, queremos compartir nuestra actualización de 2024.
En esta hoja de ruta, se describen las iniciativas actuales y las predicciones para el futuro del desarrollo de Bazel, lo que te brinda visibilidad sobre las prioridades actuales y los proyectos en curso.
Lanzamiento de Bazel 8.0
Tenemos previsto ofrecerte la asistencia a largo plazo (LTS) de Bazel 8.0 a fines de 2024. Se planea implementar las siguientes funciones.
Bzlmod: sistema de administración de dependencias externas
Bzlmod resuelve automáticamente las dependencias transitivas, lo que permite que los proyectos se escalen y, al mismo tiempo, sigan siendo rápidos y eficientes en el uso de recursos.
Con Bazel 8, inhabilitaremos la compatibilidad con WORKSPACE de forma predeterminada (aún será posible habilitarla con --enable_workspace
); con Bazel 9, se quitará la compatibilidad con WORKSPACE. A partir de Bazel 7.1, puedes establecer --noenable_workspace
para habilitar el nuevo comportamiento.
Bazel 8.0 incluirá varias mejoras en la función de administración de dependencias externas de Bazel, incluidas las siguientes:
- La nueva marca
--enable_workspace
se puede establecer enfalse
para inhabilitar por completo la funcionalidad de WORKSPACE. - Nueva API de supervisión de directorios (consulta #21435, incluida en Bazel 7.1).
- Se mejoró el esquema para generar nombres canónicos de repositorios y lograr una mejor capacidad de almacenamiento en caché de las acciones en las actualizaciones de versiones de dependencias. (#21316, se lanzó en Bazel 7.1)
- Se mejoró la caché del repositorio compartido (consulta #12227).
- Compatibilidad con el modo sin conexión y el proveedor: 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)
- Permite anular el repositorio generado por la extensión del módulo (#19301).
- Se mejoró la documentación (p.ej., #18030, #15821) y la guía y las herramientas de migración.
Mejoras en la ejecución remota
- Se agregó compatibilidad con la ejecución asíncrona, lo que acelera la ejecución remota gracias a un mayor paralelismo con la marca
--jobs
. - Se facilitó la depuración de las fallas de caché con un nuevo registro de ejecución compacto, lo que redujo su tamaño 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é de 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
Se completó la migración de los conjuntos de reglas de Android, C++, Java y Python a repositorios dedicados, y se desacoplaron de las versiones de Bazel. Este esfuerzo permite a los usuarios de Bazel y a 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
quedará obsoleto.
Bazel 8 proporcionará una marca de migración temporal que usará automáticamente los conjuntos de reglas que antes formaban parte del binario desde 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 en Starlark
- Las macros simbólicas son una nueva forma de escribir macros que es más amigable para los usuarios de
BUILD
, los autores de macros y las herramientas. En comparación con las macros heredadas, sobre las que Bazel tiene una visibilidad limitada, las macros simbólicas ayudan a los usuarios a evitar errores comunes y a aplicar las prácticas recomendadas. - Los finalizadores de paquetes son una función propuesta para agregar compatibilidad de primer nivel con la lógica de validación de paquetes personalizada. Están diseñadas para ayudarnos a desaprobar
native.existing_rules()
.
Capacidad de configuración
- La asignación de rutas de salida sigue estabilizándose, lo que promete un mejor rendimiento de la caché remota y una mayor 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 compila automáticamente destinos con marcas predeterminadas sin tener que configurar archivos bazelrc.
- No rehacer el análisis de compilación cada vez que cambian las marcas de compilación
Proyecto Skyfocus: Minimiza las estructuras de datos retenidos
Bazel mantiene mucho estado en la RAM para compilaciones incrementales rápidas. Sin embargo, los desarrolladores suelen cambiar un pequeño subconjunto de los archivos fuente (p.ej., casi nunca una de las dependencias externas). Con Skyfocus, Bazel proporcionará una forma experimental de descartar el estado incremental innecesario y reducir la huella de memoria de Bazel, al mismo tiempo que proporciona la misma experiencia de compilación incremental rápida.
El alcance inicial tiene como objetivo mejorar solo la métrica de montón retenido. Es posible que se reduzca el heap máximo, pero no se incluye en el alcance inicial.
Varios
- Mobile install v3, un enfoque más simple y mejor mantenido para implementar aplicaciones para Android de forma incremental.
- Recolección de elementos no utilizados para las memorias caché del repositorio y
install_base
de Bazel - Se redujo la sobrecarga de la zona de pruebas.
Compatibilidad con IntelliJ IDEA de Bazel-JetBrains*
Se realizaron actualizaciones incrementales del complemento de IntelliJ para admitir la versión más reciente del complemento de JetBrains.
Este resumen de la hoja de ruta muestra los objetivos y no debe considerarse como una garantía. Las prioridades están sujetas a cambios en respuesta a los comentarios de los desarrolladores y los clientes, o a nuevas oportunidades de mercado.
Para recibir notificaciones sobre las nuevas funciones, incluidas las actualizaciones de esta hoja de ruta, únete a la comunidad de Google Groups.
*Copyright © 2022 JetBrains s.r.o. JetBrains y IntelliJ son marcas comerciales registradas de JetBrains s.r.o.