Descripción general
A medida que el proyecto Bazel sigue 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.
Lanzamiento de Bazel 8.0
Planeamos ofrecer la compatibilidad 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 transiticas, lo que permite que los proyectos se escalen y, al mismo tiempo, sean 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 configurar
--noenable_workspace
para habilitar el nuevo comportamiento.
Bazel 8.0 contendrá una serie de mejoras en la funcionalidad 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, que se envía en Bazel 7.1).
- Se mejoró el esquema para generar nombres de repositorios canónicos para mejorar la capacidad de almacenamiento en caché de las acciones en las actualizaciones de versiones de dependencias. (#21316, incluido en Bazel 7.1).
- Se mejoró la caché del repositorio compartido (consulta #12227).
- Compatibilidad con el modo sin conexión y de proveedores: 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).
- Se segmentó MODULE.bazel (#17880).
- Se permite anular el repositorio generado por la extensión del módulo (#19301).
- Se mejoró la documentación (p.ej., #18030 y #15821), la guía de migración 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 aumentando el paralelismo con la marca
--jobs
. - Facilita la depuración de las faltas de caché con un nuevo registro de ejecución compacto, que reduce su tamaño en 100 veces y su sobrecarga de tiempo de ejecución de manera significativa (consulta #18643).
- Se implementó la recolección de elementos no utilizados para la caché de disco (consulta #5139).
- Se implementó el servicio de salida remoto 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 específicos y desconéctalos de las versiones de Bazel. Este esfuerzo permite a los usuarios y autores de reglas de Bazel hacer lo siguiente:
- 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 última instancia, 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 amigable para los usuarios, los autores de macros y las herramientas de
BUILD
. 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 primer nivel con la lógica de validación de paquetes personalizados. Su objetivo es ayudarnos a dar de baja
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 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 objetivos automáticamente con marcas predeterminadas sin tener que configurar bazelrcs.
- No vuelvas a realizar el análisis de compilación cada vez que cambien las marcas de compilación.
Proyecto Skyfocus: Minimiza las estructuras de datos retenidas
Bazel contiene muchos estados en la RAM para compilaciones incrementales rápidas. Sin embargo, los desarrolladores suelen cambiar un subconjunto pequeño 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 su espacio en memoria, a la vez que brinda la misma experiencia de compilación incremental rápida.
El objetivo del alcance inicial es mejorar solo la métrica del montón retenido. La reducción del 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 mejor mantenido para implementar aplicaciones para Android de forma incremental
- Recolección de elementos no utilizados para las cachés del repositorio y
install_base
de Bazel. - Se redujo la sobrecarga de la zona de pruebas.
Compatibilidad con IntelliJ IDEA de Bazel-JetBrains*
Actualizaciones incrementales del complemento de IntelliJ para admitir la versión más reciente del complemento de JetBrains.
Esta hoja de ruta incluye instantáneas de los objetivos y no debe tomarse como garantías. Las prioridades están sujetas a cambios en función de los comentarios de los desarrolladores y los clientes, o de nuevas oportunidades de mercado.
Para recibir notificaciones sobre funciones nuevas, incluidas las actualizaciones de esta hoja de ruta, únete a la comunidad de Grupos de Google.
*Derechos de autor © 2022 JetBrains s.r.o. JetBrains e IntelliJ son marcas comerciales registradas de JetBrains s.r.o.