Facebook va publicar el sistema de compilació Buck2

Facebook ha introduït un nou sistema de compilació, Buck2, centrat a construir projectes a partir de repositoris molt grans que inclouen codi en diferents llenguatges de programació. Les diferències clau entre la nova implementació i el sistema Buck que feia servir anteriorment Facebook són l'ús del llenguatge Rust en comptes de Java i un augment significatiu de l'eficiència i el rendiment del procés de muntatge (en proves internes a la mateixa infraestructura, Buck2 realitza el muntatge). tasques el doble de ràpid que Buck). El codi es distribueix sota la llicència Apache 2.0.

El sistema no està lligat al codi de construcció en idiomes específics i de manera immediata admet projectes de construcció escrits en C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell i OCaml utilitzats per Facebook. El llenguatge Starlark basat en Python (com a Bazel) s'utilitza per dissenyar complements, crear scripts i regles. Starlark us permet ampliar les capacitats del sistema de compilació i abstraure's dels llenguatges específics utilitzats en els projectes que s'estan construint.

S'aconsegueix un alt rendiment mitjançant la memòria cau dels resultats, la paral·lelització del treball i el suport per a l'execució remota de tasques (execució de compilació remota). A l'entorn de construcció, s'utilitza el concepte d'"estanquitat": el codi compilat es talla del món exterior, no es carrega res des de l'exterior durant el procés de construcció i l'execució repetida del treball en diferents sistemes condueix al mateix resultat ( compilacions repetides, per exemple, el resultat de la creació d'un projecte a la màquina del desenvolupador serà exactament el mateix que la construcció al servidor d'integració contínua). La situació de manca de dependència es percep a Buck2 com un error.

Característiques clau de Buck2:

  • Les regles per donar suport als llenguatges de programació i el nucli del sistema de compilació estan completament separats. Les regles estan escrites en el llenguatge Starlark, i el conjunt d'eines i la implementació de Starlark estan escrites en Rust.
  • El sistema de compilació utilitza un únic gràfic de dependència incremental (sense divisió en etapes), que us permet augmentar la profunditat de paral·lelització del treball en comparació amb Buck i Bazel i evitar molts tipus d'errors.
  • El codi Buck2 publicat a GitHub i les regles de suport del llenguatge de programació són gairebé idèntics a la versió interna utilitzada a la infraestructura de Facebook (les úniques diferències es troben en la vinculació a les edicions del compilador i als servidors de construcció utilitzats per Facebook).
  • El sistema de compilació està dissenyat amb l'objectiu d'integrar-se amb sistemes d'execució de treballs remots que us permeten executar treballs en servidors remots. L'API d'execució remota és compatible amb Bazel i s'ha provat la compatibilitat amb Buildbarn i EngFlow.
  • Es proporciona la integració amb sistemes de fitxers virtuals, en què es presenten els continguts de tot el dipòsit, però de fet, es treballa amb la porció local real d'una part del dipòsit (el desenvolupador veu tot el dipòsit, però només el necessari). els fitxers als quals s'accedeix es recuperen del repositori). S'admeten VFS basats en EdenFS i Git LFS, que són utilitzats per Sapling.

Font: opennet.ru

Afegeix comentari