Inilathala ng Facebook ang Buck2 build system

Ipinakilala ng Facebook ang isang bagong build system, ang Buck2, na naglalayong ayusin ang pagbuo ng mga proyekto mula sa napakalaking repositoryo, kabilang ang code sa iba't ibang programming language. Ang mga pangunahing pagkakaiba sa pagitan ng bagong pagpapatupad at ang Buck system na dating ginamit sa Facebook ay ang paggamit ng Rust na wika sa halip na Java at isang makabuluhang pagtaas sa kahusayan at pagiging produktibo ng proseso ng pagpupulong (sa mga panloob na pagsubok sa parehong imprastraktura, ang Buck2 ay nagsasagawa ng pagpupulong mga gawain nang dalawang beses nang mas mabilis kaysa sa Buck). Ang code ay ipinamahagi sa ilalim ng lisensya ng Apache 2.0.

Ang sistema ay hindi nakatali sa pagpupulong ng code sa mga partikular na wika at sa labas ng kahon ay sumusuporta sa pagpupulong ng mga proyektong nakasulat sa mga wikang C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell at OCaml , ginagamit ng Facebook. Ang wikang Starlark, batay sa Python (tulad ng sa Bazel), ay ginagamit upang magdisenyo ng mga add-on, bumuo ng mga script at panuntunan. Pinapayagan ka ng Starlark na palawakin ang mga kakayahan ng sistema ng pagpupulong at abstract mula sa mga partikular na wika na ginamit sa mga binuong proyekto.

Ang mataas na pagganap ay nakakamit sa pamamagitan ng pag-cache ng mga resulta, parallelization ng trabaho at suporta para sa malayuang pagpapatupad ng mga gawain (Remote Build Execution). Sa kapaligiran ng pagpupulong, ang konsepto ng "hermeticity" ay ginagamit - ang pinagsama-samang code ay pinutol mula sa labas ng mundo, walang na-load mula sa labas sa panahon ng proseso ng pagpupulong, at ang paulit-ulit na pagpapatupad ng trabaho sa iba't ibang mga sistema ay humantong sa parehong resulta ( mga paulit-ulit na pagtitipon, halimbawa, ang resulta ng pag-assemble ng isang proyekto sa makina ng developer ay magiging ganap na kapareho ng build sa tuluy-tuloy na integration server). Ang sitwasyon ng kakulangan ng dependency ay nakikita bilang isang error sa Buck2.

Mga pangunahing tampok ng Buck2:

  • Ang mga patakaran para sa pagsuporta sa mga programming language at ang core ng sistema ng pagpupulong ay ganap na hiwalay. Ginagamit ng mga panuntunan ang wikang Starlark, at ang toolkit at pagpapatupad ng Starlark ay nakasulat sa Rust.
  • Ang sistema ng pagpupulong ay gumagamit ng isang solong incremental dependency graph (nang walang paghahati sa mga yugto), na nagbibigay-daan sa pagtaas ng lalim ng parallelization ng trabaho kumpara sa Buck at Bazel at pag-iwas sa maraming uri ng mga error.
  • Ang Buck2 code na inilathala sa GitHub at ang mga patakaran para sa pagsuporta sa mga programming language ay halos magkapareho sa panloob na bersyon na ginamit sa imprastraktura ng Facebook (ang tanging pagkakaiba ay nauugnay sa mga edisyon ng mga compiler at assembly server na ginagamit sa Facebook).
  • Ang sistema ng pagpupulong ay idinisenyo na may mata sa pagsasama sa mga malayuang sistema ng pagpapatupad ng gawain na nagbibigay-daan sa iyong magpatakbo ng trabaho sa mga malalayong server. Ang remote execution API ay compatible sa Bazel at nasubok para sa compatibility sa Buildbarn at EngFlow.
  • Ang pagsasama sa mga virtual file system ay ibinigay, kung saan ang mga nilalaman ng buong repositoryo ay ipinakita, ngunit sa katunayan, ang trabaho ay isinasagawa gamit ang isang kasalukuyang lokal na hiwa ng bahagi ng repositoryo (nakikita ng developer ang buong repositoryo, ngunit ang mga kinakailangang file lamang na na-access ay nakuha mula sa imbakan). Ang VFS batay sa EdenFS at Git LFS, na ginagamit sa Sapling, ay sinusuportahan.

Pinagmulan: opennet.ru

Magdagdag ng komento