フェイスブック導入 最近、「Buck2」と呼ばれる新しいビルド システムがリリースされました。 リポジトリからのプロジェクトの構築に焦点を当てています MUY 異なる言語のコードを含む大きなもの プログラミング。
違い 新しい実装とシステムの間 以前に使用されたバック Facebookで Java の代わりに Rust 言語を使用している アセンブリ プロセスの効率とパフォーマンスが大幅に向上します (同じインフラストラクチャでの内部テストでは、Buck2 は Buck の XNUMX 倍の速さでアセンブリ タスクを実行します)。
ビルド システムは、開発者と実行中のコードの間に位置するため、エクスペリエンスを高速化し、生産性を高めるためにできることは、開発者の効率に直接影響します。 Buck2 の目標は、Buck1 で気に入っているもの (基本とワークフロー) を維持し、Buck1 後のイノベーション (Bazel、Adapton、Shake など) からインスピレーションを得て、スピードと新しいエクスペリエンスの実現に注力することでした。
Buck2について
強調されている システムは、特定の言語でのコードの作成に結び付けられていません また、すぐに使用できる C++、Python、Rust、Kotlin、Erlang、Swift、Objective-C、Haskell、および Facebook で使用される OCaml で記述されたビルダー プロジェクトをサポートします。
Python (Bazel など) に基づく Starlark 言語は、プラグインの設計、スクリプトおよびルールの作成に使用されます。 Starlark を使用すると、ビルド システムの機能を拡張し、ビルド中のプロジェクトで使用される特定の言語から抽象化できます。
と言われています 結果をキャッシュすることで高いパフォーマンスを実現、作業の並列化、およびタスクのリモート実行のサポート (Remote Build Execution)。
ビルド環境 「気密性」の概念を使用します。 コンパイルされたコードは外部から切り離され、ビルド プロセス中に外部から何も読み込まれず、異なるシステムでジョブを繰り返し実行しても同じ結果になります (繰り返しビルド。たとえば、同じシステムでプロジェクトをコンパイルした結果開発者からのマシンは、継続的インテグレーション サーバー上のビルドとまったく同じになります)。 依存関係がない状況は、Buck2 ではバグとして認識されています。
の側で Buck2の主な機能、次の点が際立っています。
- プログラミング言語とコアビルドシステムをサポートするためのルールは完全に分離されています。 ルールは Starlark 言語で書かれており、Starlark ツールキットと実装は Rust で書かれています。
- ビルド システムは、単一の増分依存関係グラフ (ステージングなし) を使用します。これにより、Buck や Bazel と比較して作業の並列化の深さが増し、多くの種類のバグを回避できます。
- GitHub に投稿された Buck2 のコードとプログラミング言語のサポート ルールは、Facebook のインフラストラクチャで使用されている内部バージョンとほぼ同じです (相違点は、Facebook が使用するコンパイラ エディションとビルド サーバーへのリンクのみです)。
- ビルド システムは、リモート サーバーでジョブを実行できるリモート ジョブ実行システムと統合するように設計されています。 リモート実行 API は Bazel と互換性があり、Buildbarn および EngFlow との互換性がテストされています。
- リポジトリ全体のコンテンツが表示される仮想ファイル システムとの統合が提供されますが、実際には、作業はリポジトリの一部の実際のローカル部分で実行されます (開発者はリポジトリ全体を見ることができますが、が必要です) アクセスされたファイルはリポジトリから取得されます)。 Sapling で使用される EdenFS ベースの VFS と Git LFS がサポートされています。
最後に、それについてもっと知りたいと思っている人は、コードが Apache 2.0 ライセンスの下で配布されており、詳細を参照できることを知っておく必要があります。 次のリンクで。