Facebook hat das Buck2-Build-System veröffentlicht

Facebook hat mit Buck2 ein neues Build-System eingeführt, das sich auf die Erstellung von Projekten aus sehr großen Repositories konzentriert, die Code in verschiedenen Programmiersprachen enthalten. Die wesentlichen Unterschiede zwischen der neuen Implementierung und dem zuvor von Facebook verwendeten Buck-System sind die Verwendung der Rust-Sprache anstelle von Java und eine deutliche Steigerung der Effizienz und Leistung des Assembly-Prozesses (in internen Tests in derselben Infrastruktur führt Buck2 die Assembly durch). Aufgaben doppelt so schnell wie Buck). Der Code wird unter der Apache 2.0-Lizenz vertrieben.

Das System ist nicht an die Erstellung von Code in bestimmten Sprachen gebunden und unterstützt sofort die Erstellung von Projekten, die in C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell und OCaml geschrieben sind und von Facebook verwendet werden. Die auf Python basierende Starlark-Sprache (wie in Bazel) wird zum Entwerfen von Add-ons, zum Erstellen von Skripten und Regeln verwendet. Mit Starlark können Sie die Fähigkeiten des Build-Systems erweitern und von den spezifischen Sprachen abstrahieren, die in den zu erstellenden Projekten verwendet werden.

Eine hohe Leistung wird durch Zwischenspeicherung der Ergebnisse, Parallelisierung der Arbeit und Unterstützung der Remote-Ausführung von Aufgaben (Remote Build Execution) erreicht. In der Build-Umgebung wird das Konzept der „Tightness“ verwendet – der kompilierte Code ist von der Außenwelt abgeschnitten, während des Build-Prozesses wird nichts von außen geladen und die wiederholte Ausführung von Arbeiten auf verschiedenen Systemen führt zum gleichen Ergebnis ( Bei wiederholten Builds ist beispielsweise das Ergebnis der Erstellung eines Projekts auf dem Computer des Entwicklers genau das gleiche wie das Ergebnis des Builds auf dem Continuous-Integration-Server. Die Situation der fehlenden Abhängigkeit wird in Buck2 als Fehler empfunden.

Hauptmerkmale von Buck2:

  • Die Regeln zur Unterstützung von Programmiersprachen und der Kern des Build-Systems sind vollständig getrennt. Die Regeln sind in der Starlark-Sprache geschrieben und das Starlark-Toolkit und die Implementierung sind in Rust geschrieben.
  • Das Build-System verwendet ein einzelnes inkrementelles Abhängigkeitsdiagramm (ohne Unterteilung in Stufen), wodurch Sie die Tiefe der Parallelisierung der Arbeit im Vergleich zu Buck und Bazel erhöhen und viele Arten von Fehlern vermeiden können.
  • Der auf GitHub veröffentlichte Buck2-Code und die Regeln zur Programmiersprachenunterstützung sind nahezu identisch mit der internen Version, die in der Facebook-Infrastruktur verwendet wird (die einzigen Unterschiede bestehen in der Bindung an die von Facebook verwendeten Compiler-Editionen und Build-Server).
  • Das Build-System wurde im Hinblick auf die Integration mit Remote-Job-Ausführungssystemen entwickelt, die es Ihnen ermöglichen, Jobs auf Remote-Servern auszuführen. Die Remote-Ausführungs-API ist mit Bazel kompatibel und wurde auf Kompatibilität mit Buildbarn und EngFlow getestet.
  • Es ist eine Integration mit virtuellen Dateisystemen vorgesehen, in denen der Inhalt des gesamten Repositorys dargestellt wird. Tatsächlich wird jedoch mit dem tatsächlichen lokalen Ausschnitt eines Teils des Repositorys gearbeitet (der Entwickler sieht das gesamte Repository, jedoch nur das erforderliche). (Dateien, auf die zugegriffen wird, werden aus dem Repository abgerufen). Unterstützt werden VFS auf Basis von EdenFS und Git LFS, die von Sapling verwendet werden.

Source: opennet.ru

Kommentar hinzufügen