Facebook publicó el sistema de compilación Buck2

Facebook ha introducido un nuevo sistema de compilación, Buck2, que se enfoca en crear proyectos a partir de repositorios muy grandes que incluyen código en diferentes lenguajes de programación. Las diferencias clave entre la nueva implementación y el sistema Buck utilizado anteriormente por Facebook son el uso del lenguaje Rust en lugar de Java y un aumento significativo en la eficiencia y el rendimiento del proceso de ensamblaje (en pruebas internas en la misma infraestructura, Buck2 realiza ensamblaje tareas el doble de rápido que Buck). El código se distribuye bajo la licencia Apache 2.0.

El sistema no está vinculado a la construcción de código en lenguajes específicos y, de manera inmediata, admite proyectos de construcción escritos en C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell y OCaml utilizados por Facebook. El lenguaje Starlark basado en Python (como en Bazel) se usa para diseñar complementos, crear scripts y reglas. Starlark le permite ampliar las capacidades del sistema de construcción y abstraerse de los lenguajes específicos utilizados en los proyectos que se están construyendo.

El alto rendimiento se logra mediante el almacenamiento en caché de los resultados, la paralelización del trabajo y el soporte para la ejecución remota de tareas (Remote Build Execution). En el entorno de construcción, se utiliza el concepto de "hermeticidad": el código compilado se separa del mundo exterior, nada se carga desde el exterior durante el proceso de construcción y la ejecución repetida del trabajo en diferentes sistemas conduce al mismo resultado ( compilaciones repetidas, por ejemplo, el resultado de compilar un proyecto en la máquina del desarrollador será exactamente el mismo que la compilación en el servidor de integración continua). La situación de falta de dependencia se percibe en Buck2 como un error.

Características clave de Buck2:

  • Las reglas para admitir lenguajes de programación y el núcleo del sistema de compilación están completamente separados. Las reglas están escritas en el lenguaje Starlark, y el kit de herramientas y la implementación de Starlark están escritos en Rust.
  • El sistema de compilación utiliza un único gráfico de dependencia incremental (sin división en etapas), lo que le permite aumentar la profundidad de la paralelización del trabajo en comparación con Buck y Bazel y evitar muchos tipos de errores.
  • El código de Buck2 publicado en GitHub y las reglas de soporte del lenguaje de programación son casi idénticas a la versión interna utilizada en la infraestructura de Facebook (las únicas diferencias son el enlace a las ediciones del compilador y los servidores de compilación utilizados por Facebook).
  • El sistema de compilación está diseñado con miras a la integración con sistemas de ejecución de trabajos remotos que le permiten ejecutar trabajos en servidores remotos. La API de ejecución remota es compatible con Bazel y se ha probado su compatibilidad con Buildbarn y EngFlow.
  • Se proporciona integración con sistemas de archivos virtuales, en los que se presentan los contenidos de todo el repositorio, pero de hecho, el trabajo se lleva a cabo con la parte local real de una parte del repositorio (el desarrollador ve todo el repositorio, pero solo lo necesario). los archivos a los que se accede se recuperan del repositorio). Se admiten VFS basados ​​en EdenFS y Git LFS, que son utilizados por Sapling.

Fuente: opennet.ru

Añadir un comentario