Facebook publicou o sistema de compilación Buck2

Facebook presentou un novo sistema de compilación, Buck2, destinado a organizar a construción de proxectos a partir de repositorios moi grandes, incluíndo código en diferentes linguaxes de programación. As principais diferenzas entre a nova implementación e o sistema Buck empregado anteriormente en Facebook son o uso da linguaxe Rust en lugar de Java e un aumento significativo da eficiencia e produtividade do proceso de montaxe (nas probas internas na mesma infraestrutura, Buck2 realiza a montaxe). tarefas dúas veces máis rápido que Buck). O código distribúese baixo a licenza Apache 2.0.

O sistema non está ligado á montaxe de código en linguaxes específicas e admite a montaxe de proxectos escritos nas linguaxes C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell e OCaml. , usado por Facebook. A linguaxe Starlark, baseada en Python (como en Bazel), úsase para deseñar complementos, construír scripts e regras. Starlark permítelle ampliar as capacidades do sistema de montaxe e abstraer das linguaxes específicas utilizadas nos proxectos ensamblados.

Conséguese un alto rendemento mediante o caché de resultados, a paralelización do traballo e o soporte para a execución remota de tarefas (Execución de compilación remota). No entorno de montaxe utilízase o concepto de "hermeticidade": o código ensamblado córtase do mundo exterior, nada se carga desde fóra durante o proceso de montaxe e as execucións repetidas de traballo en diferentes sistemas levan ao mesmo resultado ( As ensamblaxes repetidas, por exemplo, o resultado de montar un proxecto na máquina do programador será completamente idéntico ao compilado no servidor de integración continua). A situación de falta de dependencia percíbese como un erro en Buck2.

Características principais de Buck2:

  • As regras para soportar linguaxes de programación e o núcleo do sistema de montaxe están completamente separadas. As regras usan a linguaxe Starlark, e o conxunto de ferramentas e implementación de Starlark están escritos en Rust.
  • O sistema de montaxe utiliza un único gráfico de dependencia incremental (sen división en etapas), que permite aumentar a profundidade de paralelización do traballo en comparación con Buck e Bazel e evitar moitos tipos de erros.
  • O código Buck2 publicado en GitHub e as regras para soportar linguaxes de programación son case idénticas á versión interna utilizada na infraestrutura de Facebook (as únicas diferenzas están en relación ás edicións de compiladores e servidores de montaxe utilizados en Facebook).
  • O sistema de montaxe está deseñado coa intención de integrarse con sistemas de execución de tarefas remotas que lle permiten executar traballos en servidores remotos. A API de execución remota é compatible con Bazel e probouse a súa compatibilidade con Buildbarn e EngFlow.
  • Ofrécese a integración con sistemas de ficheiros virtuais, nos que se presentan os contidos de todo o repositorio, pero de feito, o traballo lévase a cabo cunha porción local actual de parte do repositorio (o desenvolvedor ve todo o repositorio, pero só os ficheiros necesarios). aos que se accede extráense do repositorio). Admítense VFS baseados en EdenFS e Git LFS, que se usan en Sapling.

Fonte: opennet.ru

Engadir un comentario