Facebook компани Buck2 бүтээх системийг нийтэлсэн

Facebook нь өөр өөр програмчлалын хэл дээрх кодыг багтаасан маш том агуулахуудаас төсөл бүтээх ажлыг зохион байгуулах зорилготой Buck2 хэмээх шинэ бүтээх системийг нэвтрүүлсэн. Шинэ хэрэгжүүлэлт болон өмнө нь Facebook-д хэрэглэгдэж байсан Бак системийн гол ялгаа нь Java-ийн оронд Rust хэлийг ашиглах, угсралтын үйл явцын үр ашиг, бүтээмжийг мэдэгдэхүйц нэмэгдүүлэх явдал юм (ижил дэд бүтцийн дотоод туршилтанд Buck2 угсралтыг гүйцэтгэдэг. Бакаас хоёр дахин хурдан даалгавар). Кодыг Apache 2.0 лицензийн дагуу түгээдэг.

Энэ систем нь тодорхой хэл дээрх код угсралттай холбоогүй бөгөөд C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell, OCaml хэл дээр бичигдсэн төслүүдийн угсралтыг дэмждэг. , Facebook ашигладаг. Python дээр суурилсан Starlark хэлийг (Bazel-ийн адил) нэмэлт программ зохиох, скрипт, дүрмийг бүтээхэд ашигладаг. Starlark нь угсралтын системийн чадавхийг өргөжүүлж, угсарсан төслүүдэд ашигласан тодорхой хэлнүүдээс хийсвэрлэх боломжийг олгодог.

Үр дүнг кэшлэх, ажлыг параллель болгох, даалгаврыг алсаас гүйцэтгэхэд дэмжлэг үзүүлэх (Алсын зайнаас бүтээх) тусламжтайгаар өндөр гүйцэтгэлд хүрдэг. Угсрах орчинд "герметик" гэсэн ойлголтыг ашигладаг - угсарсан код нь гадаад ертөнцөөс таслагдах, угсрах явцад гаднаас юу ч ачаалагдахгүй, өөр өөр систем дээр олон удаа ажил гүйцэтгэх нь ижил үр дүнд хүргэдэг ( давтагдсан угсралт, жишээлбэл, хөгжүүлэгчийн машин дээр төслийг угсрах үр дүн нь тасралтгүй нэгтгэх сервер дээр бүтээгдсэнтэй бүрэн ижил байх болно). Хамааралгүй байх нөхцөл байдлыг Buck2-т алдаа гэж үздэг.

Buck2-ийн гол онцлогууд:

  • Програмчлалын хэлийг дэмжих дүрмүүд болон угсралтын системийн цөм нь бүрэн тусдаа байдаг. Дүрмүүд нь Starlark хэлийг ашигладаг бөгөөд Starlark хэрэглүүр болон хэрэгжилт нь Rust хэл дээр бичигдсэн байдаг.
  • Угсралтын систем нь нэг өсөлтийн хамаарлын графикийг (үе шат болгон хуваахгүйгээр) ашигладаг бөгөөд энэ нь Бак, Базел нартай харьцуулахад ажлын параллель байдлын гүнийг нэмэгдүүлэх, олон төрлийн алдаанаас зайлсхийх боломжийг олгодог.
  • GitHub дээр нийтлэгдсэн Buck2 код болон програмчлалын хэлийг дэмжих дүрмүүд нь Facebook-ийн дэд бүтцэд ашигладаг дотоод хувилбартай бараг ижил байдаг (зөвхөн ялгаа нь Facebook-д хэрэглэгддэг хөрвүүлэгч болон ассемблер серверүүдийн хувилбартай холбоотой).
  • Угсрах систем нь алсын сервер дээр ажиллах боломжийг олгодог алсын зайнаас даалгавар гүйцэтгэх системтэй нэгтгэх зорилготойгоор бүтээгдсэн. Алсын удирдлагатай API нь Bazel-тэй нийцтэй бөгөөд Buildbarn болон EngFlow-тай нийцэж байгаа эсэхийг шалгасан.
  • Виртуал файлын системтэй интеграцчлалыг хангасан бөгөөд үүнд агуулахын агуулгыг бүхэлд нь харуулсан боловч үнэн хэрэгтээ репозиторын нэг хэсгийн одоогийн локал зүсмэлүүдээр ажилладаг (хөгжүүлэгч нь бүх репозиторыг хардаг, гэхдээ зөвхөн шаардлагатай файлуудыг л хардаг) хандсан мэдээллийг репозитороос гаргаж авдаг). Sapling-д хэрэглэгддэг EdenFS болон Git LFS дээр суурилсан VFS-г дэмждэг.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх