¿Por qué Bazel?

Informar un problema Ver fuente Noche /}1}

Bazel es una herramienta de compilación rápida, correcta y extensible con pruebas integradas que admite múltiples lenguajes, repositorios y plataformas en un ecosistema líder de la industria.

Bazel es rápido.

Bazel sabe exactamente qué archivos de entrada necesita cada comando de compilación, lo que evita el trabajo innecesario y vuelve a ejecutarlo solo cuando el conjunto de archivos de entrada haya cambiado entre cada compilación. Ejecuta comandos de compilación con el mayor paralelismo posible, ya sea dentro de la misma computadora o en nodos de compilación remotos. Si la estructura de compilación lo permite, puede ejecutar miles de comandos de compilación o de prueba al mismo tiempo.

Esto es compatible con varias capas de almacenamiento en caché, en la memoria, en el disco y en la granja de compilación remota, si está disponible. En Google, alcanzamos habitualmente tasas de aciertos de caché del norte del 99%.

Bazel es correcto.

Bazel garantiza que tus objetos binarios se compilen únicamente a partir de tu propio código fuente. Las acciones de Bazel se ejecutan en zonas de pruebas individuales, y Bazel hace un seguimiento de cada archivo de entrada de la compilación, solo y siempre vuelve a ejecutar los comandos de compilación cuando sea necesario. De esta manera, se mantienen actualizados los objetos binarios para que el mismo código fuente siempre genere el mismo objeto binario, bit a bit.

Dile buenos bytes a las invocaciones make clean infinitas y a perseguir errores fantasmas que, de hecho, se resolvieron en código fuente que nunca se compilaron.

Bazel es extensible

Para aprovechar toda la potencia de Bazel, escribe tus propias reglas y macros para personalizar Bazel según tus necesidades específicas en una amplia variedad de proyectos.

Las reglas de Bazel están escritas en Starlark, nuestro lenguaje de programación interno que es un subconjunto de Python. Starlark hace que la escritura de reglas sea accesible para la mayoría de los desarrolladores, a la vez que crea reglas que se pueden usar en todo el ecosistema.

Pruebas integradas

El ejecutor de pruebas integradas de Bazel conoce y ejecuta solo aquellas pruebas que deben volver a ejecutarse, mediante la ejecución remota (si está disponible) para ejecutarlas en paralelo. Detecta las láminas con anticipación mediante la ejecución remota para ejecutar una prueba miles de veces con rapidez.

Bazel proporciona instalaciones para subir los resultados de las pruebas a una ubicación central, lo que facilita la comunicación eficiente de los resultados de las pruebas, ya sea en CI o por parte de desarrolladores individuales.

Compatibilidad con diferentes lenguajes

Bazel es compatible con muchos lenguajes de programación comunes, incluidos C++, Java, Kotlin, Python, Go y Rust. Puedes compilar varios objetos binarios (por ejemplo, un backend, una IU web y una app para dispositivos móviles) en la misma invocación de Bazel sin estar limitado a la herramienta de compilación idiomática de un lenguaje.

Compatibilidad con varios repositorios

Bazel puede recopilar código fuente de varias ubicaciones: no necesitas proveer tus dependencias (pero puedes hacerlo); en cambio, puedes apuntar Bazel a la ubicación de tu código fuente o de los artefactos precompilados (p.ej., un repositorio de Git o Maven Central) y se encargará del resto.

Compatibilidad multiplataforma

Bazel puede compilar proyectos de forma simultánea para varias plataformas, incluidos Linux, macOS, Windows y Android. También proporciona capacidades de compilación cruzada potentes que permiten compilar código para una plataforma mientras se ejecuta la compilación en otra.

Ecosistema amplio

A los líderes de la industria les encanta Bazel, ya que creó una gran comunidad de desarrolladores que usan Bazel y contribuyen con él. Encuentra herramientas, servicios y documentación, incluidas ofertas de asesoramiento y SaaS que Bazel pueda usar. Explora extensiones como la compatibilidad con lenguajes de programación en nuestros repositorios de software de código abierto.