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 actuales y las predicciones 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
Tenemos previsto ofrecerte la asistencia a largo plazo long term support (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 ajusten a la escala y, al mismo tiempo, sigan siendo rápidos y eficientes en cuanto a los recursos.
Con Bazel 8, inhabilitaremos la compatibilidad con WORKSPACE de forma predeterminada (aún se podrá habilitar 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á varias mejoras en la funcionalidad de administración de dependencias externas de Bazel, incluidas las siguientes:
- Se puede configurar la nueva marca
--enable_workspaceenfalsepara inhabilitar por completo la funcionalidad de WORKSPACE. - Nueva API de observación de directorios (consulta #21435, que se lanzó 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 versiones de dependencias (#21316, que se lanzó en Bazel 7.1)
- Una caché de repositorio compartido mejorada (consulta #12227)
- Compatibilidad con el proveedor y el 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)
- Permite anular el repositorio generado por la extensión del módulo (#19301)
- Documentación mejorada (p. ej., #18030, #15821) y guía de migración y 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 mediante un mayor paralelismo con la marca
--jobs. - Se facilitó 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 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 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
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 hacer lo siguiente:
- Actualizar las reglas de forma independiente de Bazel
- Actualizar y personalizar 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á obsoleta.
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 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, en las que Bazel solo tiene información limitada, 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 personalizados. Su objetivo es ayudarnos a marcar
native.existing_rules()como obsoleta.
Configurabilidad
- La asignación de rutas de salida continúa 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
--platformsdeterminado. - Define combinaciones de marcas compatibles con el proyecto y compila automáticamente objetivos 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 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 el espacio 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. La reducción máxima del montón 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 de repositorios y
install_basede Bazel - Se redujo la sobrecarga de aislamiento de procesos.
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 muestra objetivos y no debe considerarse como garantías. 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 funciones nuevas, incluidas las actualizaciones de esta hoja de ruta, únete a la comunidad de Google Group.
*Copyright © 2022 JetBrains s.r.o. JetBrains e IntelliJ son marcas registradas de JetBrains s.r.o