Facebook-ը հրապարակել է Buck2 build համակարգը

Facebook-ը ներկայացրել է նոր build համակարգ՝ Buck2, որը կենտրոնացած է շատ մեծ պահեստներից նախագծեր կառուցելու վրա, որոնք ներառում են կոդ տարբեր ծրագրավորման լեզուներով: Նոր ներդրման և նախկինում Facebook-ի կողմից օգտագործված Buck համակարգի միջև հիմնական տարբերությունները Java-ի փոխարեն Rust լեզվի օգտագործումն են և հավաքման գործընթացի արդյունավետության և կատարողականի զգալի աճը (նույն ենթակառուցվածքում ներքին թեստերում Buck2-ը կատարում է հավաքում: առաջադրանքները երկու անգամ ավելի արագ, քան Բաքը): Կոդը տարածվում է Apache 2.0 լիցենզիայի ներքո:

Համակարգը կապված չէ կոնկրետ լեզուներով կառուցման կոդի հետ և աջակցում է C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell և OCaml լեզուներով գրված նախագծերը, որոնք օգտագործվում են Facebook-ի կողմից: Python-ի վրա հիմնված Starlark լեզուն (ինչպես Bazel-ում) օգտագործվում է հավելումներ նախագծելու, սցենարներ և կանոններ ստեղծելու համար: Starlark-ը թույլ է տալիս ընդլայնել կառուցման համակարգի հնարավորությունները և վերացական անել կառուցվող նախագծերում օգտագործվող հատուկ լեզուներից:

Բարձր կատարողականությունը ձեռք է բերվում արդյունքների քեշավորման, աշխատանքի զուգահեռացման և առաջադրանքների հեռակա կատարման աջակցության միջոցով (Remote Build Execution): Կառուցման միջավայրում օգտագործվում է «խստություն» հասկացությունը. կազմված կոդը կտրված է արտաքին աշխարհից, կառուցման գործընթացում դրսից ոչինչ չի բեռնվում, և տարբեր համակարգերի վրա աշխատանքի կրկնակի կատարումը հանգեցնում է նույն արդյունքի ( կրկնվող կառուցումներ, օրինակ, մշակողի մեքենայի վրա նախագծի կառուցման արդյունքը կլինի ճիշտ նույնը, ինչ շարունակական ինտեգրման սերվերի վրա կառուցվածը): Կախվածության բացակայության իրավիճակը Buck2-ում ընկալվում է որպես սխալ։

Buck2 հիմնական հատկանիշները.

  • Ծրագրավորման լեզուների աջակցման կանոնները և կառուցման համակարգի հիմքը լիովին տարանջատված են: Կանոնները գրված են Starlark լեզվով, իսկ Starlark գործիքակազմը և իրականացումը գրված են Rust-ով:
  • Կառուցման համակարգը օգտագործում է մեկ աճող կախվածության գրաֆիկ (առանց փուլերի բաժանման), որը թույլ է տալիս մեծացնել աշխատանքի զուգահեռացման խորությունը Բաքի և Բազելի համեմատ և խուսափել բազմաթիվ տեսակի սխալներից:
  • GitHub-ում հրապարակված Buck2 կոդը և ծրագրավորման լեզվի աջակցության կանոնները գրեթե նույնական են Facebook-ի ենթակառուցվածքում օգտագործվող ներքին տարբերակին (տարբերությունները միայն կոմպիլյատորների հրատարակությունների և Ֆեյսբուքի կողմից օգտագործվող սերվերների կառուցման մեջ են):
  • Կառուցման համակարգը նախագծված է հեռավոր աշխատանքների կատարման համակարգերի հետ ինտեգրվելու համար, որոնք թույլ են տալիս աշխատատեղեր գործարկել հեռավոր սերվերների վրա: Հեռակա կատարման API-ն համատեղելի է Bazel-ի հետ և փորձարկվել է Buildbarn-ի և EngFlow-ի հետ համատեղելիության համար:
  • Տրամադրվում է ինտեգրում վիրտուալ ֆայլային համակարգերի հետ, որոնցում ներկայացված է ամբողջ պահեստի բովանդակությունը, բայց իրականում աշխատանքն իրականացվում է պահեստի մի մասի իրական տեղական հատվածով (մշակողը տեսնում է ամբողջ պահեստը, բայց միայն անհրաժեշտը. ֆայլերը, որոնք հասանելի են, վերցվում են պահոցից): Աջակցվում են VFS-ները՝ հիմնված EdenFS-ի և Git LFS-ի վրա, որոնք օգտագործվում են Sapling-ի կողմից:

Source: opennet.ru

Добавить комментарий