نشر Facebook نظام بناء Buck2

أدخل Facebook نظام إنشاء جديد ، Buck2 ، يركز على تنظيم بناء المشاريع من مستودعات كبيرة جدًا ، بما في ذلك التعليمات البرمجية بلغات البرمجة المختلفة. تتمثل الاختلافات الرئيسية بين التطبيق الجديد ونظام Buck الذي استخدمه Facebook سابقًا في استخدام لغة Rust بدلاً من Java وزيادة كبيرة في كفاءة وأداء عملية التجميع (في الاختبارات الداخلية في نفس البنية التحتية ، يقوم Buck2 بالتجميع المهام أسرع مرتين من باك). يتم توزيع الكود بموجب ترخيص Apache 2.0.

لا يرتبط النظام ببناء كود بلغات محددة ويدعم خارج الصندوق مشاريع البناء المكتوبة بلغة C ++ و Python و Rust و Kotlin و Erlang و Swift و Objective-C و Haskell و OCaml التي يستخدمها Facebook. تُستخدم لغة Starlark ، المستندة إلى Python (كما هو الحال في Bazel) ، لتصميم الإضافات ، وبناء البرامج النصية والقواعد. يسمح لك Starlark بتوسيع إمكانيات نظام البناء والتلخيص من اللغات المحددة المستخدمة في المشاريع التي يتم بناؤها.

يتم تحقيق الأداء العالي من خلال التخزين المؤقت للنتائج ، وموازاة العمل ودعم تنفيذ المهام عن بُعد (تنفيذ البناء عن بُعد). في بيئة البناء ، يتم استخدام مفهوم "ضيق" - يتم قطع الكود المترجم عن العالم الخارجي ، ولا يتم تحميل أي شيء من الخارج أثناء عملية البناء ، ويؤدي التنفيذ المتكرر للعمل على أنظمة مختلفة إلى نفس النتيجة ( عمليات الإنشاء المتكررة ، على سبيل المثال ، ستكون نتيجة بناء مشروع على جهاز المطور هي نفسها تمامًا الإنشاء على خادم التكامل المستمر). يُنظر إلى حالة نقص التبعية في Buck2 على أنها خطأ.

الميزات الرئيسية Buck2:

  • قواعد دعم لغات البرمجة وجوهر نظام البناء منفصلان تمامًا. القواعد مكتوبة بلغة Starlark ، ومجموعة أدوات Starlark والتنفيذ مكتوبة في Rust.
  • يستخدم نظام البناء مخطط تبعية تزايدي واحد (بدون تقسيم إلى مراحل) ، مما يسمح لك بزيادة عمق موازاة العمل مقارنةً بـ Buck و Bazel وتجنب العديد من أنواع الأخطاء.
  • كود Buck2 المنشور على GitHub وقواعد دعم لغة البرمجة متطابقة تقريبًا مع الإصدار الداخلي المستخدم في بنية Facebook الأساسية (الاختلافات الوحيدة في الارتباط بإصدارات المترجم وبناء الخوادم التي يستخدمها Facebook).
  • تم تصميم نظام الإنشاء مع مراعاة التكامل مع أنظمة تنفيذ المهام عن بُعد التي تتيح لك تشغيل المهام على الخوادم البعيدة. تتوافق واجهة برمجة تطبيقات التنفيذ عن بُعد مع Bazel وتم اختبارها للتوافق مع Buildbarn و EngFlow.
  • يتم توفير التكامل مع أنظمة الملفات الافتراضية ، حيث يتم تقديم محتويات المستودع بالكامل ، ولكن في الواقع ، يتم تنفيذ العمل مع الشريحة المحلية الفعلية لجزء من المستودع (يرى المطور المستودع بأكمله ، ولكن فقط المطلوب يتم استرداد الملفات التي تم الوصول إليها من المستودع). المدعومة هي VFS على أساس EdenFS و Git LFS ، والتي تستخدمها Sapling.

المصدر: opennet.ru

إضافة تعليق