Lanzamiento del sistema de compilación Bazel 2.0

Disponible liberación de herramientas de montaje abiertas Bazel 2.0, desarrollado por ingenieros de Google y utilizado para ensamblar la mayoría de los proyectos internos de la empresa. Bazel construye el proyecto ejecutando los compiladores y pruebas necesarios. Admite la creación y prueba de código en Java, C++, Objective-C, Python, Rust, Go y muchos otros lenguajes, además de crear aplicaciones móviles para Android e iOS. Código de proyecto distribuido por licenciado bajo Apache 2.0.

Un cambio de versión significativo implica la adición de cambios que rompen la compatibilidad con versiones anteriores. A partir de Bazel 2.0, los siguientes modos están habilitados de forma predeterminada: “—incompatible_remap_main_repo” (enlaces por nombre y mediante @ ahora enlazan al mismo repositorio), “—incompatible_disallow_dict_lookup”_(uso de claves que no se pueden dividir),
"--incompatible_remove_native_maven_jar" y "--incompatible_prohibit_aapt1". Otros cambios incluyen:

  • En un equipo una consulta ha aparecido soporte experimental para una nueva edición del formato de salida “proto” (-output=proto), que actualmente está deshabilitado de forma predeterminada (-incompatible_proto_output_v2) y proporciona una presentación de datos más compacta;
  • Se agregó el indicador "--incompatible_remove_enabled_toolchain_types" para eliminar el campo PlatformConfiguration.enabled_toolchain_types;
  • Se agregó protección contra la carga de paquetes que usan enlaces simbólicos cíclicos al cargar rutas al expandirlas;
  • Se implementó la capacidad de utilizar el indicador “--disk_cache” con cachés gRPC externos;
  • El paquete Debian y el instalador binario incluyen una capa mejorada que maneja archivos ~/.bazelversion y la variable de entorno $USE_BAZEL_VERSION;
  • En preparación para la desactivación de los archivos de manifiesto de runfiles, se agregó la bandera "--experimental_skip_runfiles_manifests".

Entre las características distintivas de Bazel se encuentran la alta velocidad, confiabilidad y repetibilidad del proceso de ensamblaje. Para lograr una alta velocidad de compilación, Bazel utiliza activamente técnicas de almacenamiento en caché y paralelización para el proceso de compilación. Los archivos BUILD deben definir completamente todas las dependencias, sobre la base de las cuales se toman decisiones para reconstruir los componentes después de realizar los cambios (solo se reconstruyen los archivos modificados) y paralelizar el proceso de ensamblaje. Las herramientas también garantizan un montaje repetible, es decir. El resultado de construir un proyecto en la máquina del desarrollador será completamente idéntico al de construir en sistemas de terceros, como servidores de integración continua.

A diferencia de Make y Ninja, Bazel utiliza un enfoque de nivel superior para crear reglas de ensamblaje, en el que, en lugar de definir la vinculación de comandos a los archivos que se están creando, se utilizan bloques más abstractos ya preparados, como "construir un archivo ejecutable en C++”, “construir una biblioteca en C++” o “ejecutar una prueba para C++”, así como identificar plataformas de destino y de compilación. En el archivo de texto BUILD, los componentes del proyecto se describen como un conjunto de bibliotecas, archivos ejecutables y pruebas, sin detallar a nivel de archivos individuales y comandos de llamada del compilador. La funcionalidad adicional se implementa a través del mecanismo para conectar extensiones.

Se admite el uso de archivos de ensamblaje únicos para diferentes plataformas y arquitecturas; por ejemplo, un archivo de ensamblaje sin cambios se puede usar tanto para un sistema de servidor como para un dispositivo móvil. El sistema de compilación está diseñado desde cero para compilar de manera óptima proyectos de Google, incluidos proyectos muy grandes y proyectos que contienen código en múltiples lenguajes de programación, requieren pruebas exhaustivas y están diseñados para múltiples plataformas.

Fuente: opennet.ru

Añadir un comentario